Я наблюдаю какое-то странное поведение со следующим кодом:
$.fn.submit_to_remote = function() {
// I use .each instead of the .submit directly so I can save
// the 'submitEnabled' variable separately for each form
jQuery.each($(this), function() {
$(this).submit(function() {
form = $(this);
if (form.data('submitEnabled') == false) { alert('disabled'); return false; }
form.data('submitEnabled', false);
$.ajax({type: 'POST', url: 'url', data: data, dataType: 'script',
success: function(script) {
alert('success')
}
})
return false;
})
})
}
$('.submit_to_remote').submit_to_remote();
Таким образом, в основном при вызове submit_to_remote на форме (-ах), он отключит его обычный submit и затем выполнит запрос POST AJAX.
Странная вещь заключается в том, что форма отправляется несколько раз, так как будет отображаться предупреждение "disabled". Как вы можете видеть, я предотвращаю это, используя "переменную", сохраненную на объекте формы, и проверяя эту переменную, чтобы увидеть, была ли форма уже отправлена.
При дальнейшем тестировании кажется, что виновником является script, возвращаемый вызовом AJAX. Позвольте мне немного пояснить, что я делаю, чтобы это было более ясно.
Форма отправляется на сервер и возвращается script. script показывает форму снова, но на этот раз с сообщениями об ошибках для некоторых полей. Обратите внимание, что форма полностью заменена.
script при показе новой формы выполняет следующее:
$('.submit_to_remote').submit_to_remote();
Я должен сделать это, потому что иначе, когда вы снова нажимаете кнопку отправки, форма отправляется нормально, нет AJAX.
Итак, скажем, пользователь отправляет форму и возвращается с соответствующими ошибками (предупреждение "disabled" не отображается). Затем он подает его снова; на этот раз предупреждение "отключено" отображается один раз. Теперь он отправляет его еще раз, и на этот раз предупреждение отображается дважды! И так далее...
Итак, кажется, что обратный вызов .submit добавляется снова и снова с каждым запросом, но почему?
Может быть, с помощью .html() исходная форма хранится как призрак или что-то еще?
Спасибо!
PS: В случае, если это имеет значение, здесь script, возвращаемый вызовом $.ajax:
replace_content_with = 'the form and other stuff here';
$('.page-content').html(replace_content_with);
$('.submit_to_remote').submit_to_remote();