Насколько я знаю, при изменении атрибутов объекта не происходит никаких событий (правка: кроме, по-видимому, Object.watch
).
Почему бы не использовать делегирование событий везде, где это возможно? То есть события в форме, а не в отдельных элементах формы, фиксирующие события по мере их всплытия?
Например (мой jQuery ржавый, простите, что вместо этого я использую Prototype, но я уверен, что вы сможете легко его адаптировать):
$(form).observe('change', function(e) {
// To identify changed field, in Proto use e.element()
// but I think in jQuery it's e.target (as it should be)
});
Вы также можете захватывать события input
и keyup
и paste
, если хотите, чтобы они срабатывали в текстовых полях до того, как они потеряли фокус. Мое решение для этого обычно:
- Браузеры на базе Gecko / Webkit: Наблюдайте
input
на form
.
- Также в браузерах на основе Webkit: наблюдает
keyup
и paste
события на textarea
с (по некоторым причинам они не запускаются input
на textarea
с).
- IE: соблюдать
keyup
и paste
на form
- Наблюдайте
change
на form
(срабатывает select
с).
- Для событий
keyup
и paste
сравните текущее значение поля с его значением по умолчанию (каким оно было при загрузке страницы), сравнив value
текстового поля с defaultValue
Редактировать: Вот пример кода, который я разработал для предотвращения отправки неизмененной формы и тому подобное:
Каков наилучший способ отслеживания изменений в форме с помощью JavaScript?