После очень полезных советов и советов, найденных здесь, я придумал этот фрагмент.jQuery проверить, изменилась ли форма HTML
Я хотел бы проверить, были ли изменены поля формы. Если значение true, покажите значок предупреждения со всплывающей подсказкой на верхней странице страницы, если значение false или возвращается к значению поля по умолчанию, скройте значок предупреждения. С помощью этого сценария я мог бы это сделать, но я хотел бы знать, правильно ли это, и может ли он быть улучшен. Новичок здесь
В дополнение к тому, что уже сделано, я также хотел бы отметить поле, которое было изменено (пример: изменить класс метки поля).
$(':input').on('keyup keydown blur change', function() {
var isDirty = false;
$(':input').each(function() {
var $e = $(this);
if($e.is(':input[type=radio]') && $e.prop('defaultChecked') != $e.prop('checked')) {
isDirty = true;
} else if($e.is('select') && !this.options[this.selectedIndex].defaultSelected) {
isDirty = true;
} else if($e.is(':input[type=text], :input[type=url], :input[type=email], textarea') && $e.prop('defaultValue') != $e.val()) {
isDirty = true;
}
if(isDirty == true){
$("#toolbar-warning span").attr({
'class': 'btn active hasTooltip icon-warning-2',
'data-original-title': 'has changes!'
});
} else {
$("#toolbar-warning span").attr({
'class': 'btn hasTooltip icon-warning-2',
'data-original-title': ''
});
}
})
});
Вы уже привязываете обработчики событий ко всем полям ввода, поэтому не должно быть необходимости проверять значение каждого поля на каждом вызове - проверка значения текущего поля, для которого было инициировано событие, должна быть достаточной. – CBroe
@ CBroe Спасибо. Если я не использую 'each' и, например, я изменил 2 значения полей и после того, как одно из этих полей вернулось к его значению по умолчанию,« имеет изменения! » предупреждение исчезает, и у него все еще есть одно поле. –
Событие будет срабатывать для каждого изменения поля ввода - поэтому каждый из них будет обрабатываться вашей функцией по отдельности. – CBroe