Jquery disable form submit on enter

У меня на моей странице есть javascript, который, похоже, не работает.

$('form').bind("keypress", function(e) {
  if (e.keyCode == 13) {               
    e.preventDefault();
    return false;
  }
});

Я бы хотел отключить отправку формы при вводе или, еще лучше, для вызова моей формы ajax. Любое решение приемлемо, но код, который я включаю выше, не препятствует отправке формы.

Ответ 1

Если keyCode не пойман, поймайте which:

$('#formid').on('keyup keypress', function(e) {
  var keyCode = e.keyCode || e.which;
  if (keyCode === 13) { 
    e.preventDefault();
    return false;
  }
});

EDIT: пропустил его, лучше использовать keyup вместо keypress

РЕДАКТИРОВАТЬ 2: Как и в некоторых новых версиях Firefox, представление формы не предотвращается, но безопаснее добавлять событие keypress в форму. Также он не работает (больше?), Просто привязывая событие к форме "имя", но только к идентификатору формы. Поэтому я сделал это более очевидным, изменив пример кода соответствующим образом.

ИЗМЕНИТЬ 3: Изменено bind() до on()

Ответ 2

Обычно форма отображается на Enter, когда вы фокусируетесь на элементах ввода.

Мы можем отключить ключ Enter (код 13) на входных элементах в форме:

$('form input').on('keypress', function(e) {
    return e.which !== 13;
});

DEMO: http://jsfiddle.net/bnx96/325/

Ответ 3

Еще короче:

$('myform').submit(function() {
  return false;
});

Ответ 4

$('form').keyup(function(e) {
  return e.which !== 13  
});

Свойство event.which нормализует event.keyCode и event.charCode. Рекомендуется следить за событием. Для ввода клавиатуры.

which docs.

Ответ 5

$(document).on('keyup keypress', 'form input[type="text"]', function(e) {
  if(e.which == 13) {
    e.preventDefault();
    return false;
  }
});

Это решение работает во всех формах на веб-сайте (также в формах, вставленных с помощью ajax), предотвращая только входящие тексты ввода. Поместите его в функцию готовности документа и забудьте об этой проблеме на всю жизнь.

Ответ 6

Из-за чрезмерного количества ошибок при захвате и проверке каждого нажатия клавиши ВВОД меня вызывает ошибка, поэтому мое решение зависит от поведения браузера:

Нажатие ENTER приведет к событию клика на кнопке отправки (проверено в IE11, Chrome 38, FF 31) ** (ref: http://mattsnider.com/how-forms-submit-when-pressing-enter/)

Итак, мое решение состоит в том, чтобы удалить стандартную кнопку отправки (т.е. <input type="submit">), чтобы вышеуказанное поведение терпит неудачу, потому что нет кнопки отправки для магического нажатия при нажатии ENTER. Вместо этого я использую обработчик jQuery click на обычной кнопке, чтобы отправить форму через метод jQuery .submit().

<form id="myform" method="post">
  <input name="fav_color" type="text">
  <input name="fav_color_2" type="text">
<button type="button" id="form-button-submit">DO IT!</button>
</form>

<script>
 $('#form-button-submit').click(function(){
    $('#myform').submit();
  });
</script>

Демо: http://codepen.io/anon/pen/fxeyv?editors=101

** это поведение неприменимо, если форма имеет только одно поле ввода и это поле является "текстовым" входом; в этом случае форма будет отправляться по клавише ENTER, даже если в HTML-разметке отсутствует кнопка отправки (например, поле поиска). Это стандартное поведение браузера с 90-х годов.

Ответ 7

Большинство приведенных выше ответов не позволят пользователям добавлять новые строки в поле textarea. Если это то, чего вы хотите избежать, вы можете исключить этот конкретный случай, проверив, какой элемент в данный момент имеет фокус:

var keyCode = e.keyCode || e.which;
if (keyCode === 13 && !$(document.activeElement).is('textarea')) {
  e.preventDefault();
  return false;
}

Ответ 8

если вы просто хотите отключить отправку на кнопку ввода и отправки, также используйте форму onsubmit event

<form onsubmit="return false;">

Вы можете заменить "return false" на вызов функции JS, которая будет делать все необходимое, а также отправить форму в качестве последнего шага.

Ответ 9

Вы можете сделать это отлично в чистом Javascript, просто и без библиотеки. Вот мой подробный ответ на аналогичную тему: Отключить ключ ввода для формы

Короче говоря, вот код:

<script type="text/javascript">
window.addEventListener('keydown',function(e){if(e.keyIdentifier=='U+000A'||e.keyIdentifier=='Enter'||e.keyCode==13){if(e.target.nodeName=='INPUT'&&e.target.type=='text'){e.preventDefault();return false;}}},true);
</script>

Этот код предназначен для предотвращения использования ключа "Enter" для типа ввода = "текст". (Поскольку посетителю, возможно, потребуется нажать Enter на странице). Если вы хотите отключить "Enter" для других действий, вы можете добавить console.log(e); для ваших целей тестирования и нажмите F12 в хроме, перейдите на вкладку "console" и нажмите "backspace" на странице и загляните внутрь, чтобы увидеть, какие значения будут возвращены, затем вы можете настроить таргетинг на все эти параметры для дальнейшего улучшения кода выше, чтобы удовлетворить ваши потребности в "e.target.nodeName" , "e.target.type" и многом другом...

Ответ 10

Я не знаю, решите ли вы эту проблему или кто-то, кто пытается решить это сейчас, но вот мое решение для этого!

$j(':input:not(textarea)').keydown(function(event){
    var kc = event.witch || event.keyCode;
    if(kc == 13){
    event.preventDefault();
        $j(this).closest('form').attr('data-oldaction', function(){
            return $(this).attr('action');
        }).attr('action', 'javascript:;');

        alert('some_text_if_you_want');

        $j(this).closest('form').attr('action', function(){
            return $(this).attr('data-oldaction');
        });
        return false;
    }
});

Ответ 11

Следующий код будет отрицать, что ключ ввода используется для отправки формы, но все равно позволит вам использовать клавишу ввода в текстовом поле. Вы можете отредактировать его дальше в зависимости от ваших потребностей.

<script type="text/javascript">
        function stopRKey(evt) {
          var evt = (evt) ? evt : ((event) ? event : null);
          var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
          if ((evt.keyCode == 13) && ((node.type=="text") || (node.type=="radio") || (node.type=="checkbox")) )  {return false;}
        }

        document.onkeypress = stopRKey;
</script> 

Ответ 12

В firefox, когда вы на входе и нажмите enter, он представит его в верхней форме. Решение находится в форме заявки на добавление:

<input type="submit" onclick="return false;" style="display:none" />

Ответ 13

3 года спустя, и ни один человек не ответил на этот вопрос полностью.

Ответчик хочет отменить отправку формы по умолчанию и вызвать собственный Ajax. Это простой запрос с простым решением. Нет необходимости перехватывать каждый символ, вводимый в каждый вход.

Предполагая, что форма имеет кнопку отправки, будь то <button id="save-form"> или <input id="save-form" type="submit">, выполните:

$("#save-form").on("click", function () {
    $.ajax({
        ...
    });
    return false;
});

Ответ 14

Простой способ - изменить тип кнопки на кнопку - в html, а затем добавить событие в js...

Изменить от этого:

<form id="myForm">
   <button type="submit">Submit</button>
</form>

Для

<form id="myForm">
   <button type="button" id="btnSubmit">Submit</button>
</form>

А в JS или JQuery добавить:

("#btnSubmit").click(function () {
    $('#myForm').submit();
});

Ответ 15

Когда файл закончен (загрузка завершена), script обнаруживает каждое событие для клавиши "Enter", и он отключает событие позади.

<script>
            $(document).ready(function () {
                $(window).keydown(function(event){
                    if(event.keyCode == 13) {
                        e.preventDefault(); // Disable the " Entry " key
                        return false;               
                    }
                });
            });
        </script>

Ответ 16

Полное решение в JavaScript для всех браузеров

Код выше и большинство решений являются идеальными. Тем не менее, я думаю, что наиболее понравился один "короткий ответ", который является неполным.

Итак, вот весь ответ. в JavaScript с встроенной поддержкой IE 7.

var form = document.getElementById("testForm");
form.addEventListener("submit",function(e){e.preventDefault(); return false;});

Это решение теперь запретит пользователю отправлять данные с помощью ключа ввода и не перезагружает страницу или не вернет вас в начало страницы, если ваша форма находится где-то внизу.

Ответ 17

Как насчет этого:

$(":submit").closest("form").submit(function(){
    $(':submit').attr('disabled', 'disabled');
});

Это должно отключить все формы с кнопками отправки в вашем приложении.