Простой способ проверки изменений в форме

K
На сайте с 12.07.2006
Offline
295
Kpd
1747

Есть большая форма (>40 полей). Требуется на стороне браузера средствами JavaScript проверить были ли введены новые значения хотя бы в одно поле. Как это сделать проще всего?

Пока придумал только один способ - при открытии формы гененировать хэш (например, md5) суммарного значения всех полей, а на onsubmit с помощью javascript делать такой же хэш и сравнивать с первоначальным. Не очень простой способ + требуется подключение внешних библиотек js (лишние килобайты трафика критичны).

Подскажите более простой способ.

Igorrok
На сайте с 28.08.2007
Offline
117
#1

Можно использовать <input ... onChange = 'function()'>

Истина где-то рядом...
D
На сайте с 21.06.2006
Offline
168
#2

Через обработчик onChange/onClick?

Или вместо md5 - CRC(короткий алгоритм)

Appstorespy - платформа анализа мобильных сторов | Publa.io - готовая инфраструктура для приема платежей и оплаты рекламных кабинетов в бурже
K
На сайте с 12.07.2006
Offline
295
Kpd
#3
Igorrok:
Можно использовать <input ... onChange = 'function()'>

Если человек внес изменения в форму, а потом вернул прежнее значение. то с onChange будет ложное срабатывание.

Dash:
Или вместо md5 - CRC(короткий алгоритм)

Спасибо, посмотрю в эту сторону.

D
На сайте с 21.06.2006
Offline
168
#4
Kpd:
Если человек внес изменения в форму, а потом вернул прежнее значение. то с onChange будет ложное срабатывание.

Хранить первоначальное значение и с ним сравнивать.

Коля Дубр
На сайте с 02.03.2005
Offline
153
#5
Dash:
Хранить первоначальное значение и с ним сравнивать.

На самом деле, первоначальное значение и так хранится. Думаю, что это нужно в первую очередь для работы кнопки Reset, которая эти значения восстанавливает.

Для полей input[@type = 'text' or @type = 'password'] и textarea - см. свойство defaultValue, для input[@type = 'radio' or @type = 'checkbox'] - defaultChecked. С select хитрее - сохраняется свойство defaultSelected для каждого option, поэтому их приходится оббегать циклом.

При этом для обычных (не-multiple) селектов есть такая засада: если ни у одного option не установлен атрибут selected (т.е. значение не выбрано) - первому option выставляется свойство selected = true, что в некотором смысле логично. Я придумал, что можно обходить все option-ы, и, если выбран первый и ни у одного другого нет свойства defaultSelected == true - решать, что значение не изменилось. Возможно, будет шустрее работать, если сразу после загрузки формы сохранять для select'ов первоначальные значения.

Вот тут можно посмотреть пример, а заодно сообщить мне, работает ли оно в IE7 :)

Разрабатываю общую шину (http://habrahabr.ru/company/floxim/blog/268467/) помаленьку. ...а еще у меня есть бложек (http://www.blogovo.ru/).
K
На сайте с 12.07.2006
Offline
295
Kpd
#6
Коля Дубр:
а заодно сообщить мне, работает ли оно в IE7

Работает. Спасибо за defaultValue, не знал.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий