У меня есть опрос на веб-сайте, и, кажется, есть некоторые проблемы с пользователями, нажимающими клавишу ввода (я не знаю почему) и случайно отправляющими опрос (форму), не нажимая кнопку отправки. Есть ли способ предотвратить это?
В опросе я использую HTML, PHP 5.2.9 и jQuery.
jquery
html
forms
form-submit
DForck42
источник
источник
Ответы:
Вы можете использовать метод, такой как
При чтении комментариев к исходному сообщению, чтобы сделать его более удобным и позволить людям нажимать, Enterесли они заполнили все поля:
источник
keydown
наdocument
вместоwindow
для этого к работе.&& !$(document.activeElement).is('textarea')
условие, иначе новые строки внутри текстовой области заблокированы (по крайней мере, в IE).Запретить ввод ключа в любом месте
Если у вас нет
<textarea>
формы, просто добавьте следующее<form>
:Или с помощью jQuery:
Это приведет к тому, что каждое нажатие клавиши внутри формы будет проверяться на
key
. Если это не такEnter
, то он вернетсяtrue
и все будет продолжаться как обычно. Если это такEnter
, то он вернетсяfalse
и все немедленно прекратится, поэтому форма не будет отправлена.keydown
Событие является предпочтительным по сравнениюkeyup
, посколькуkeyup
слишком поздно , чтобы блок отправки формы. Исторически сложилось и тоkeypress
, но это не рекомендуетсяKeyboardEvent.keyCode
.KeyboardEvent.key
Вместо этого следует использовать, который возвращает имя нажатой клавиши. когдаEnter
установлен этот флажок, то будет проверяться 13 (обычный ввод), а также 108 (ввод numpad).Обратите внимание, что,
$(window)
как предлагается в некоторых других ответах, вместо /$(document)
не работает дляkeydown
/keyup
в IE <= 8, так что это не лучший выбор, если вы хотите охватить и этих бедных пользователей.Разрешить ввод ключа только для текстовых областей
Если у тебя есть
<textarea>
в вашей форме есть буква (которая, конечно, должна принимать клавишу Enter), добавьте обработчик нажатия клавиш к каждому отдельному элементу ввода, который не является<textarea>
.Чтобы уменьшить шаблон, это лучше сделать с помощью jQuery:
Если к этим элементам ввода присоединены другие функции-обработчики событий, которые по какой-либо причине вы также хотели бы вызывать по клавише ввода, тогда нужно только запретить поведение события по умолчанию, а не возвращать false, чтобы оно могло правильно распространяться на другие обработчики.
Разрешить вводить ключ для текстовых областей и отправлять только кнопки
Если вы хотите разрешить ввод ключа на кнопках отправки
<input|button type="submit">
, вы всегда можете уточнить селектор, как показано ниже.Обратите внимание, что,
input[type=text]
как предлагается в некоторых других ответах, не распространяется на эти нетекстовые вводы HTML5, так что это не хороший селектор.источник
":input:not(textarea):not([type=submit]):not(button)"
если вы используете<button>
вместо<input type=submit>
input
?Раздел 4.10.22.2 Неявное представление спецификации W3C HTML5 гласит:
Следовательно, совместимый со стандартами способ отключения любой неявной отправки формы состоит в том, чтобы поместить отключенную кнопку отправки в качестве первой кнопки отправки в форме:
Приятной особенностью этого подхода является то, что он работает без JavaScript ; независимо от того, включен JavaScript или нет, требуется веб-браузер, соответствующий стандартам, чтобы предотвратить неявную отправку формы.
источник
<input type="submit" disabled style="display: none" aria-hidden="true" />
и вы можете уменьшить размер вашей страницы на несколько символов. :-PМне пришлось перехватить все три события, связанные с нажатием клавиш, чтобы предотвратить отправку формы:
Вы можете объединить все вышеперечисленное в симпатичную компактную версию:
источник
$("#search").bind('keypress keyup keydown',preventSubmit)
;<form>
тег, то введите ключ будет отправить форму ... Это решение отключить клавишу ввода и проблема решена , хотя, спасибо @ Dave! Затем я активировал клавишу ввода для определенных полейid
.console.log
, я обновил свой ответ.keypress keyup keydown
вами дважды вызвать любой код в условии if .Если вы используете скрипт для фактической отправки, вы можете добавить строку «return false» в обработчик onsubmit следующим образом:
Вызов submit () в форме из JavaScript не вызовет событие.
источник
Использование:
Это решение работает со всеми формами на веб-сайте (также с формами, вставленными с помощью Ajax), предотвращая только Enterввод текста. Поместите это в функцию готовности документа и забудьте эту проблему на всю жизнь.
источник
e.which
был в порядке; нет необходимости менять его наe.keyCode
. Оба возвращают значение 13 для клавиши ввода. См stackoverflow.com/a/4471635/292060 и stackoverflow.com/a/18184976/292060Вместо того, чтобы мешать пользователям нажимать Enter , что может показаться неестественным, вы можете оставить форму как есть и добавить дополнительную проверку на стороне клиента: когда опрос не завершен, результат не отправляется на сервер, и пользователь получает приятное сообщение о том, что что должно быть закончено, чтобы заполнить форму. Если вы используете jQuery, попробуйте плагин Validation:
http://docs.jquery.com/Plugins/Validation
Это потребует больше работы, чем ловля Enterкнопки, но, несомненно, обеспечит более богатый пользовательский опыт.
источник
Хорошее простое маленькое решение jQuery:
источник
var key = event.keyCode || event.which; if (key == 13) return false;
Я пока не могу комментировать, поэтому выложу новый ответ
Принятый ответ в порядке, но он не остановил отправку при вводе номера. По крайней мере, в текущей версии Chrome. Я должен был изменить условие кода ключа к этому, тогда это работает.
источник
Это мое решение для достижения цели, это чисто и эффективно.
источник
Совершенно другой подход:
<button type="submit">
в форме будет активирован при нажатииEnter .style="display:none;
false
, что прерывает процесс отправки.<button type=submit>
чтобы отправить форму. Просто вернитесьtrue
к каскадному представлению.<textarea>
или другие элементы управления формы будут вести себя как обычно.<input>
элементов управления формы вызовет первый<button type=submit>
, который возвращаетсяfalse
, и, таким образом, ничего не происходит.Таким образом:
источник
<button onclick="this.disabled=true;this.form.submit();" type="submit"">submit</button>
Придание форме действия javascript: void (0); кажется, добивается цели
источник
Не положить кнопку отправки может сделать. Просто поместите скрипт для ввода (type = button) или добавьте eventListener, если вы хотите, чтобы он отправлял данные в форме.
Скорее используйте это
чем использовать это
источник
источник
Мне нужно было запретить отправку только определенных входных данных, поэтому я использовал селектор классов, чтобы это было «глобальной» функцией везде, где мне это нужно.
И этот код JQuery:
В качестве альтернативы, если нажатие клавиши недостаточно:
Некоторые заметки:
Изменяя различные хорошие ответы здесь, Enterключ, кажется, работает во
keydown
всех браузерах. Для альтернативы, я обновилbind()
кon()
методу.Я большой поклонник селекторов класса, взвешивающий все за и против и обсуждения производительности. Мое соглашение об именах - «idSomething», чтобы указать, что jQuery использует его как идентификатор, чтобы отделить его от стиля CSS.
источник
Вы можете создать метод JavaScript, чтобы проверить, был ли нажат Enterключ, и, если это так, остановить отправку.
Просто вызовите это в методе отправки.
источник
ТОЛЬКО BLOCK SUBMIT, но не другие важные функции ввода, такие как создание нового абзаца в
<textarea>
:источник
function(e)
этого должно бытьfunction(event)
. В противном случае это работает для меня. Спасибо.on("keydown", function(event) { enterPressed = true; }
а затем в событии submit, doon("submit", function(e) { if (pressedEnter == true) { pressedEnter = false; e.preventDefault(); return false;}
This гарантирует, что оно будет работать независимо от задержки.Это идеальный способ, Вы не будете перенаправлены со своей страницы
источник
У меня была похожая проблема, где у меня была сетка с «текстовыми полями ajax» (Yii CGridView) и только одна кнопка отправки. Каждый раз, когда я выполнял поиск по текстовому полю и нажимал, введите отправленную форму. Мне пришлось что-то делать с кнопкой, потому что это была единственная общая кнопка между представлениями (шаблон MVC). Все, что мне нужно было сделать, это удалить
type="submit"
и положитьonclick="document.forms[0].submit()
источник
Я думаю, что он хорошо покрыт всеми ответами, но если вы используете кнопку с некоторым кодом проверки JavaScript, вы можете просто установить onkeypress формы для Enter, чтобы вызвать ваш запрос, как ожидалось:
Onkeypress JS может быть чем угодно. Нет необходимости в больших глобальных изменениях. Это особенно верно, если вы не тот, кто кодирует приложение с нуля, и вы были привлечены к исправлению чужого веб-сайта, не разрывая его и не перепроверяя.
источник
Здесь уже есть много хороших ответов, я просто хочу внести свой вклад с точки зрения UX. Клавиатура управления в формах очень важны.
Вопрос в том, как отключить подачу на нажатие клавиши
Enter
. Не как игнорироватьEnter
во всем приложении. Так что рассмотрите присоединение обработчика к элементу формы, а не к окну.Отключение отправки
Enter
формы должно по-прежнему разрешать следующее:Enter
отправки через когда кнопка отправки находится в фокусе.Enter
.Это всего лишь пример, но он соответствует всем трем условиям.
источник
Что-то, чего я не видел, ответило здесь: когда вы перемещаетесь по элементам на странице, нажатие Enterпри переходе к кнопке отправки запускает обработчик onsubmit в форме, но записывает событие как MouseEvent. Вот мое краткое решение, охватывающее большинство основ:
Это не связанный с jQuery ответ
HTML
JavaScript
Чтобы найти рабочий пример: https://jsfiddle.net/nemesarial/6rhogva2/
источник
В моем конкретном случае мне пришлось остановить ENTER от отправки формы, а также имитировать нажатие кнопки отправки. Это потому, что кнопка отправки имела обработчик щелчка, потому что мы были в модальном окне (унаследованный старый код). В любом случае вот мои комбо решения для этого случая.
Этот вариант использования особенно полезен для людей, работающих с IE8.
источник
Это работает для меня
источник
Я хотел бы добавить немного кода CoffeeScript (не проверен на местах):
(Надеюсь, вам понравился приятный трюк в предложении "исключение".)
источник
Используя Javascript (без проверки какого-либо поля ввода):
Если кто-то хочет применить это к определенным полям, например, введите тип текста:
Это хорошо работает в моем случае.
источник
Зайдите в свой CSS и добавьте, что он будет автоматически блокировать отправку вашего бланка, если вы отправляете ввод, если он вам больше не нужен, вы можете удалить его или ввести
activate
иdeactivate
вместо этогоисточник
Вы также можете использовать
javascript:void(0)
для предотвращения отправки формы.источник
method="post"
на форме. Например, я хочу, чтобы форма отправлялась кнопками, но не при нажатии клавиши ввода, когда она фокусируется на вводе.method="post"
форму и его работы, проверьте еще раз.Это сработало для меня во всех браузерах после большого разочарования другими решениями. Внешняя функция name_space предназначена для того, чтобы держаться подальше от объявления глобалов, что я также рекомендую.
Образец использования:
источник
Использование:
источник