Событие изменения jQuery (для отслеживания обновлений формы) - PullRequest
0 голосов
/ 18 июля 2011

Я отслеживаю элементы ввода формы для изменения (чтобы предупредить пользователя о несохраненных изменениях формы при выходе из страницы).

Насколько я понимаю, событие изменения jQuery запускается только после того, как определенные элементы ввода теряют фокус(например, текстовое поле).

Это проблематично, поскольку пользователь может отредактировать одно текстовое поле, затем попытаться выйти, и событие изменения текстового поля не сработает.

Вот как далеко я продвинулся:

var formChanges = {
    override: false,
    changed: false,
    checkChanges: function() {
        if(!formChanges.override) {
           if(formChanges.changed) {
               return "There are currently unsaved changes.";
           }
        }
    },
    init: $(document).ready(function() {
        $('#checkThis').submit(function() { //'checkThis' is the form ID
           formChanges.override = true;
       });
       $(':input').change(function() {
           formChanges.changed = true;
       });
    })
}
window.onbeforeunload = formChanges.checkChanges;

Есть идеи, как преодолеть эту проблему?

Ответы [ 3 ]

3 голосов
/ 18 июля 2011

На самом деле для того, что вы делаете, я думаю, что вам лучше использовать нажатие клавиш или keyup для ввода и изменения для выбора и радио, как это

   $('input:text, textarea').keypress(function() {
       formChanges.changed = true;
   });

   $('select, input:radio, input:checkbox').change(function(){
       formChanges.changed = true;
   });
2 голосов
/ 12 августа 2011

это, кажется, работает очень хорошо:

var oldForm = null;
function monitorChanges(form) {
    if(oldForm == null) {
        oldForm = ($(form).serialize());
    } else {
        alert(oldForm == $(form).serialize());
    }
}
0 голосов
/ 18 июля 2011

«взлом» будет сосредоточен на несвязанном элементе при выгрузке до checkChanges.Нажатие клавиши на самом деле не означает изменения.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...