Отключить ключ ввода для формы

Я пытаюсь отключить ключ Enter в моей форме. Код, который у меня есть, показан ниже. По какой-то причине ключ ввода по-прежнему вызывает отправку. Код находится в моей голове и кажется правильным из других источников.

disableEnterKey: function disableEnterKey(e){
        var key;      
        if(window.event)
            key = window.event.keyCode; //IE
        else
            key = e.which; //firefox      

        return (key != 13);
    },

Ответ 1

Если вы используете JQuery, это довольно просто. Ну вот

$(document).keypress(
  function(event){
    if (event.which == '13') {
      event.preventDefault();
    }
});

Ответ 2

Большинство ответов находятся в jquery. Вы можете сделать это отлично в чистом 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" ключ в textarea и на всей веб-странице. Они все равно смогут отправить форму, нажав кнопку "Отправить" клавишами "Tab" и нажав "Enter".

Вот некоторые основные моменты:

  • Он находится в чистом javascript (никакой библиотеки не требуется).
  • Не только он проверяет нажатую клавишу, она подтверждает, что элемент "Enter" попадает в элемент формы type = 'text'. (Что вызывает подачу наиболее ошибочной формы
  • Вместе с приведенным выше, пользователь может использовать ключ "Enter" в любом месте.
  • Он короткий, чистый, быстрый и прямой.

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

Ответ 3

попробуйте это ^^

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

Надеюсь, что это поможет

Ответ 4

В теге формы просто вставьте это:

onkeypress="return event.keyCode != 13;"

пример

<input type="text" class="search" placeholder="search" onkeypress="return event.keyCode != 13;">

Это может быть полезно, если вы хотите выполнять поиск при вводе и игнорировании ENTER.

/// Grab the search term
const searchInput = document.querySelector('.search')
/// Update search term when typing
searchInput.addEventListener('keyup', displayMatches)

Ответ 5

Вот простой способ выполнить это с помощью jQuery, который ограничивает его соответствующими элементами ввода:

//prevent submission of forms when pressing Enter key in a text input
$(document).on('keypress', ':input:not(textarea):not([type=submit])', function (e) {
    if (e.which == 13) e.preventDefault();
});

Благодаря этому ответу: fooobar.com/questions/13964/....

Ответ 6

Для решения, отличного от javascript, попробуйте поместить <button disabled>Submit</button> в вашу форму, расположенную перед любыми другими кнопками/входами. Я предлагаю сразу после тега <form> открытия (и используя CSS, чтобы скрыть его, accesskey = '- 1', чтобы вывести его из последовательности вкладок и т.д.)

AFAICT, пользовательские агенты ищут первую кнопку отправки, когда ENTER попадает на вход, и если эта кнопка отключена, затем прекратите искать другую.

Кнопка по умолчанию элемента формы - это первая кнопка отправки в древовидном порядке, владельцем формы которой является этот элемент формы.

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

Следовательно, если кнопка по умолчанию отключена, форма не представляется, если используется такой механизм неявного представления. (При отключенной кнопке не активировано действие.)

https://www.w3.org/TR/html5/forms.html#implicit-submission

Однако я знаю, что Safari 10 MacOS неверно работает здесь, отправив форму, даже если кнопка по умолчанию отключена.

Итак, если вы можете принять javascript, вместо этого вставьте <button onclick="return false;" >Submit</button>. В ENTER обработчик onclick будет вызван, и поскольку он возвращает false, процесс отправки останавливается. Браузеры, с которыми я тестировал это, даже не будут выполнять проверку валидации браузера (фокусирование первого недопустимого элемента управления формой, отображение сообщения об ошибке и т.д.).

Ответ 7

Вы можете попробовать что-то вроде этого, если вы используете jQuery.

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

Это будет ждать нажатия клавиш, если оно Enter, оно ничего не сделает.

Ответ 8

Просто добавьте следующий код в тег <Head> в свой HTML-код. Он будет заполнять заявку на ввод ключа. Для всех полей формы.

<script type="text/javascript">
    function stopEnterKey(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")) { return false; }
    }
    document.onkeypress = stopEnterKey;
</script>

Ответ 9

Я проверил все вышеперечисленные решения, они не работают. Единственное возможное решение - поймать событие onkeydown для каждого ввода формы. Вам нужно подключить disableAllInputs к загрузке страницы или через jquery ready()

/*
 * Prevents default behavior of pushing enter button. This method doesn't work,
 * if bind it to the 'onkeydown' of the document|form, or to the 'onkeypress' of
 * the input. So method should be attached directly to the input 'onkeydown'
 */
function preventEnterKey(e) {
    // W3C (Chrome|FF) || IE
    e = e || window.event;
    var keycode = e.which || e.keyCode;
    if (keycode == 13) { // Key code of enter button
        // Cancel default action
        if (e.preventDefault) { // W3C
            e.preventDefault();
        } else { // IE
            e.returnValue = false;
        }
        // Cancel visible action
        if (e.stopPropagation) { // W3C
            e.stopPropagation();
        } else { // IE
            e.cancelBubble = true;
        }
        // We don't need anything else
        return false;
    }
}
/* Disable enter key for all inputs of the document */
function disableAllInputs() {
    try {
        var els = document.getElementsByTagName('input');
        if (els) {
            for ( var i = 0; i < els.length; i++) {
                els[i].onkeydown = preventEnterKey;
            }
        }
    } catch (e) {
    }
}

Ответ 10

Решение очень простое:

Заменить тип "Отправить" кнопкой

<input type="button" value="Submit" onclick="this.form.submit()" />

Ответ 11

Лучший способ, который я нашел здесь:

Dream.In.Code

action="javascript: void(0)" или action="return false;" (не работает на меня)