Ответ 1
Пожалуйста, прочитайте эту документацию в методе $(). on (это заменяет .live())
Проверьте, не будет ли ваша форма не воссоздана каким-либо методом ajax - если это обработчик будет отброшен.
Я проверяю простую форму с помощью jQuery 1.6 с помощью обработчика события .submit(), который возвращает false, когда форма недействительна:
$(function() {
$('#my-form').submit(function(event) {
if (true) { // for testing, always go through the failure path
alert("Invalid entry");
return false;
} else {
return true;
}
});
});
Если пользователь сделал выбор, форма была отправлена должным образом. Если пользователь не сделал выбор, появится предупреждение, и форма не будет отправлена (опять же, правильно). Проблема в том, что в этом случае кнопка отправки больше не работает. Другими словами, после возникновения сбоя пользователь остается в форме, но нажатие кнопки отправки ничего не делает.
Я проверил HTML (нет дубликатов идентификаторов, нет имен/идентификаторов "submit", "length" и т.д.). Форма загружается динамически, поэтому тестирование с Firebug является проблемой. Другие обработчики событий в форме работают нормально (например, я вижу предупреждения при изменении значения поля). Еще одна странность: я заменил "return false" на "event.preventDefault(); return true", но форма все еще представлена. (Я думал, что .preventDefault() остановит это.)
Любые идеи?
EDIT. Этот подход работает:
$(function() {
$('#my-form :submit').click(function(event) {
if (...validation stuff goes here...) {
alert("Invalid entry");
return false;
} else {
$('#my-form').submit();
}
});
});
Мне все равно хотелось бы узнать, что случилось с моим обработчиком обработчика original.submit().
Пожалуйста, прочитайте эту документацию в методе $(). on (это заменяет .live())
Проверьте, не будет ли ваша форма не воссоздана каким-либо методом ajax - если это обработчик будет отброшен.
Ваша форма, скорее всего, перезагружается с помощью ajax.
Так как ajax перезагружает только часть страницы, $(function() { yourCodeHere });
не запускается снова. Поэтому ваш обработчик событий onSubmit
не привязан к вашей форме.
Используйте эту технику для повторного прикрепления обработчика события onSubmit
к вашей форме
$('body').on('submit','#my-form', function() {
if (true) { // for testing, always go through the failure path
alert("Invalid entry");
return false;
} else {
return true;
}
}
Мы могли бы перевести на человеческий язык как "для любого изменения тела , повторно присоединить событие onsubmit к элементу с id 'my-form'.
если форма загружена динамически, вы можете попробовать привязать событие . live() вместо этого.
как это...
$('#my-form').live('submit', function(event) {
if (true) { // for testing, always go through the failure path
alert("Invalid entry");
return false;
} else {
return true;
}
});
Кроме того, проверьте, нет ли другого вмешательства Javascript. Например, Web Forms (.NET) часто имеет обратные вызовы или некоторый связанный код для обработки обратных передач. Будучи новичком в .NET, это было только после того, как я отключил включенные скрипты/библиотеки (чтобы проверить и увидеть), что проблема была решена.
Скорее всего, другой обработчик событий привязан в другом месте. Получите расширение chrome Visual Event, чтобы подробно просмотреть все обработчики, прикрепленные к элементу, чтобы увидеть, что блокирует его.