У меня есть форма, в которой есть кнопка «Отправить».
Тем не менее, я хотел бы как-то «перехватить» событие submit и не допустить его возникновения.
Есть ли способ, которым я могу сделать это?
Я не могу изменить кнопку отправки, потому что это часть пользовательского элемента управления.
javascript
html
forms
Натан Осман
источник
источник
Ответы:
В отличие от других ответов, возвращение
false
является лишь частью ответа. Рассмотрим сценарий, в котором ошибка JS происходит до оператора return ...HTML
скрипт
возвращение
false
сюда не будет выполнено, и форма будет отправлена в любом случае. Вы также должны позвонить,preventDefault
чтобы предотвратить действие формы по умолчанию для отправки формы Ajax.В этом случае даже с ошибкой форма не будет отправлена!
В качестве альтернативы
try...catch
можно использовать блок.источник
false
прямо изonsumbit
?(<form onsubmit="return mySubmitFunction(evt)">)
. В противном случае это дает неопределенную ошибку.Вы можете использовать встроенное событие,
onsubmit
как этоИли
демонстрация
Теперь, это может быть не очень хорошая идея при создании больших проектов. Возможно, вам придется использовать Event Listeners.
Пожалуйста, прочитайте больше о Inline Events vs Event Listeners (addEventListener и IE attachEvent) здесь . Ибо я не могу объяснить это больше, чем Крис Бейкер .
источник
<form onsubmit="return false;" >
меня почему то не работает.Присоедините слушатель события к форме, используя,
.addEventListener()
а затем вызовите.preventDefault()
методevent
:Я думаю, что это лучшее решение, чем определение
submit
обработчика событий, встроенного вonsubmit
атрибут, поскольку он разделяет логику и структуру веб-страницы. Гораздо проще поддерживать проект, в котором логика отделена от HTML. Смотрите: Ненавязчивый JavaScript .Использование
.onsubmit
свойстваform
объекта DOM не является хорошей идеей, поскольку оно не позволяет вам присоединять несколько обратных вызовов submit к одному элементу. Смотрите addEventListener против onclick .источник
$("button").click(function(e) { e.preventDefault() });
Попробуй это...
HTML-код
Код JQuery
или
источник
stopPropagation
было единственным, что сработало в моем случае. Спасибо! :)На данный момент работает следующее (протестировано в Chrome и Firefox):
где validateMyForm () - это функция, которая возвращается в
false
случае сбоя проверки. Ключевым моментом является использование имениevent
. Мы не можем использовать, например, дляe.preventDefault()
источник
источник
.onsubmit
это плохая идея, потому что она мешает вам присоединить несколькоsubmit
обратных вызовов к одному элементу. Я рекомендую использовать.addEventListener()
.Чтобы следовать ненавязчивым соглашениям по программированию JavaScript и в зависимости от того, насколько быстро будет загружаться DOM , целесообразно использовать следующее:
Затем подключите события, используя onload или DOM ready, если вы используете библиотеку.
Кроме того, я всегда использовал бы этот
action
атрибут, так как у некоторых людей может быть запущен какой- нибудь плагин, такой как NoScript, который затем нарушит валидацию. Если вы используете атрибут действия, по крайней мере ваш пользователь будет перенаправлен сервером на основе проверки бэкэнда. Если вы используете что-то вродеwindow.location
, с другой стороны, все будет плохо.источник
Для предотвращения отправки формы вам нужно только сделать это.
Используя приведенный выше код, это предотвратит отправку вашей формы.
источник
Вот мой ответ:
Добавить
event.preventDefault();
наonsubmit
и она работает.источник
Вы можете добавить eventListner к форме
preventDefault()
и преобразовать данные формы в JSON, как показано ниже:источник