#javascript #jquery
#javascript #jquery
Вопрос:
Я хочу остановить отправку формы и вместо этого сделать что-то другое ( window.location.href
перенаправить на красиво напечатанный URL). Но я не могу даже получить основную часть предотвращения отправки формы.
Насколько я понимаю, что-то вроде этого должно работать:
$(function($){
$("#search_form").submit(function(e){
console.log("cancelling submit");
return false;
});
});
Я также пробовал e.preventDefault()
, e.stopPropagation()
и различные их комбинации. "cancelling submit"
печатается в консоли Firebug (поэтому событие срабатывает), но форма отправляется независимо, что бы я ни делал.
Документация и логика jQuery подразумевают, что это должно сработать, но это не так. Я делаю что-то не так?
Подключение к событию click может быть проще, но формы могут быть отправлены несколькими способами — нажатием кнопок, нажатием Enter и, возможно, чем-то еще, о чем я не подумал, поэтому я пытаюсь просто принять событие отправки.
Я тестирую все это в Firefox.
РЕДАКТИРОВАТЬ: Оказалось, что <button type='submit' onclick='this.form.submit()'>Search</button>
было причиной этого. Оглядываясь назад, это кажется глупым. Спасибо всем за помощь.
Комментарии:
1. Я думаю, весь смысл метода submit() в том, что это происходит ПРИ отправке. По определению, форма уже была отправлена, когда это событие срабатывает, и вы пытаетесь вернуть false .
2. Да, @kennis прав, я полагаю. Можете ли вы вместо этого вызвать событие click на кнопке отправки?
3. Если бы только был метод ohWaitNevermind().
4. Событие .submit() запускается до того, как браузер отправит http-запрос, позволяя вам запустить проверку, обработать форму через ajax и т.д., А затем отменить запрос отправки формы. Предоставленный код работает, в этом вопросе чего-то не хватает, что вызывает проблему.
5. СОВЕТ: исправление проблем .submit () сложно, потому что консоль не сохраняет состояние между страницами. Я бы рекомендовал использовать консоль ошибок (ctrl shift j) для диагностики любых ошибок при решении проблем .submit().
Ответ №1:
Я только что протестировал ваш код по адресу:http://jsfiddle.net/UZwr5 /
Предоставленный вами код работает в этой демонстрации. Скорее всего, у вас где-то в процессе выполнения произошла ошибка, которая мешает return false;
запуску.
Ответ №2:
попробуйте их все вместе return false
и e.StopPropagation()
и e.preventDefault()
но больше похоже на это:
if(e.stopPropagation)
{
e.stopPropagation();
}
if(e.preventDefault)
{
e.preventDefault();
}
return false;
Это делает его гораздо более совместимым с другими браузерами.