Отправка формы на "Enter" с помощью jQuery?

У меня есть стандартная форма входа в систему - текстовое поле электронной почты, поле пароля и кнопка отправки в проекте AIR, использующем HTML / jQuery. Когда я нажимаю Enter в форме, все содержимое формы исчезает, но форма не отправляется. Кто-нибудь знает, является ли это проблемой Webkit (Adobe AIR использует Webkit для HTML), или я что-то перепутал?

Я пытался:

$('.input').keypress(function (e) {
  if (e.which == 13) {
    $('form#login').submit();
  }
});

Но это не остановило очистку и не отправило форму. С формой не связано никаких действий - может быть, в этом проблема? Могу ли я включить в действие функцию javascript?


person b. e. hollenbeck    schedule 30.03.2009    source источник
comment
У вас действительно есть атрибут class = input на вашем ‹input ...? Похоже, это должно быть $ ('input'). Keypress ...   -  person NexusRex    schedule 10.01.2012
comment
Классы программно генерируются CMS. Однако, кроме этого, привязка его к $ ('input') повлияет на каждый ввод на странице, независимо от того, хочу я этого поведения или нет. Извините, это оскорбляет вашу чувствительность.   -  person b. e. hollenbeck    schedule 16.02.2012
comment
Чувства нисколько не обиделись. Просто подумал, что это могло быть оплошностью, которая привела к проблеме. Продолжать.   -  person NexusRex    schedule 22.02.2012
comment
К вашему сведению: ваш принятый ответ не совсем точен. Обратитесь к моему ответу ниже.   -  person NoBrainer    schedule 24.09.2012


Ответы (15)


$('.input').keypress(function (e) {
  if (e.which == 13) {
    $('form#login').submit();
    return false;    //<---- Add this line
  }
});

Посмотрите этот ответ stackoverflow: event.preventDefault () vs. return false

По сути, «return false» - это то же самое, что и вызов e.preventDefault и e.stopPropagation().

person NoBrainer    schedule 20.09.2012
comment
Обратите внимание, они не совпадают. IE8 не имеет e.preventDefault. Для IE8 используйте event.returnValue = false; - person mbokil; 27.07.2013
comment
@mbokil За исключением того, что при использовании jQuery в IE8 то же самое. и IE7. И IE6. - person Kevin B; 25.07.2014
comment
Если вы хотите сначала ввести в поля ввода, поместите return false; внутри оператора if. - person Juni Brosas; 16.10.2015

В дополнение к возврату false, как упомянул Джейсон Коэн. Возможно, вам также придется предотвратить

e.preventDefault();
person bendewey    schedule 30.03.2009
comment
как сказал @NoBrainer, это неправильно: return false в событии, управляемом jQuery, автоматически вызывает e.preventDefault () - person Riccardo Galli; 05.04.2013

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

    $('.input').keypress(function(e) {
        if(e.which == 13) {
            jQuery(this).blur();
            jQuery('#submit').focus().click();
        }
    });

Примечание. jQuery ('# submit'). Focus () делает кнопку анимированной при нажатии клавиши ввода.

person karim79    schedule 30.03.2009
comment
Отлично работает, но мне пришлось добавить return false; чтобы предотвратить отправку двойной формы. - person code90; 05.08.2013
comment
Рабочая | Посмотрите МНОГО результатов, таких как триггер, sendkey и т. Д., Да, бла ..., но это единственное, что работает для меня и действительно отправляет щелчок по кнопке. Не отправить (). Итак, уловка заключалась в использовании функций focus (). Click () в безопасности. СПАСИБО. - person m3nda; 16.12.2014
comment
Работает, но мне пришлось поместить этот код в: $ (document) .ready (function () {... - person shasi kanth; 22.08.2017

Верните false, чтобы нажатие клавиши не продолжалось.

person Jason Cohen    schedule 30.03.2009

Есть ли причина, по которой вам нужно подключать и проверять клавишу ввода?

Не могли бы вы просто добавить

<input type="submit" /> 

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

Вы даже можете использовать onsubmit в качестве теста, чтобы увидеть, отправляется ли ваша форма, но это не сработает, если вы вызовете form.submit().

person Zack The Human    schedule 30.03.2009
comment
Полностью согласен. Я всегда предпочитаю использовать встроенные функции браузера (входные данные type = submit изначально реагируют на нажатие клавиши ввода) вместо добавления дополнительных скриптов. - person Aaron; 18.01.2011
comment
Проблема в том, что если вы работаете с ajax и на сервере нет фактической обратной передачи, но вы хотите, чтобы пользовательский интерфейс вел себя так, как ожидает пользователь? - person devlord; 26.10.2012
comment
В самом деле ... Я упустил из виду все return false;. - person devlord; 29.10.2012

Вот способ сделать это как плагин JQuery (на случай, если вы хотите повторно использовать эту функциональность):

$.fn.onEnterKey =
    function( closure ) {
        $(this).keypress(
            function( event ) {
                var code = event.keyCode ? event.keyCode : event.which;

                if (code == 13) {
                    closure();
                    return false;
                }
            } );
    }

Теперь, если вы хотите украсить элемент <input> с помощью этого типа функциональности, это очень просто:

$('#your-input-id').onEnterKey(
    function() {
        // Do stuff here
    } );
person bvaughn    schedule 03.03.2013

Вы также можете просто добавить onsubmit="return false" в код формы на странице, чтобы предотвратить поведение по умолчанию.

Затем подключите (.bind или .live) событие формы submit к любой функции с jQuery в файле javascript.

Вот пример кода, который поможет:

HTML

<form id="search_form" onsubmit="return false">
   <input type="text" id="search_field"/>
   <input type="button" id="search_btn" value="SEARCH"/>
</form>

Javascript + jQuery

$(document).ready(function() {

    $('#search_form').live("submit", function() {
        any_function()
    });
});

Это работает с 2011-04-13, с Firefox 4.0 и jQuery 1.4.3.

person GERV    schedule 13.04.2011

Это мой код:

  $("#txtMessage").on( "keypress", function(event) {
    if (event.which == 13 && !event.shiftKey) {
        event.preventDefault();
        $("#frSendMessage").submit();
    }
    });
person Hoàng Vũ Tgtt    schedule 13.07.2014

Также для обеспечения доступности вы должны использовать это, чтобы определить свой ключевой код:

c = e.which ? e.which : e.keyCode;

if (c == 13) ...
person Logan Serman    schedule 30.03.2009

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

Например:

<form action="submit.php" method="post">
Name : <input type="text" name="test">
<input type="submit" style="display: none;">
</form>
person Joem Maranan    schedule 25.07.2013
comment
@cebirci а какая версия у тебя хром? Я тестировал с ноутбука на компьютер, и мой код просто работает. Попробуйте загрузить новейшую версию Chrome, прежде чем пометить ее в моем ответе. - person Joem Maranan; 07.11.2013

Я использую сейчас

$("form").submit(function(event){
...
}

Сначала я добавил обработчик событий к кнопке отправки, что вызвало у меня ошибку.

person faebser    schedule 03.08.2010

Сегодня я узнал, что событие нажатия клавиши не запускается при нажатии клавиши Enter, поэтому вы можете вместо этого переключиться на keydown () или keyup ().

Мой тестовый сценарий:

        $('.module input').keydown(function (e) {
            var keyCode = e.which;
            console.log("keydown ("+keyCode+")")
            if (keyCode == 13) {
                console.log("enter");
                return false;
            }
        });
        $('.module input').keyup(function (e) {
            var keyCode = e.which;
            console.log("keyup ("+keyCode+")")
            if (keyCode == 13) {
                console.log("enter");
                return false;
            }
        });
        $('.module input').keypress(function (e) {
            var keyCode = e.which;
            console.log("keypress ("+keyCode+")");
            if (keyCode == 13) {
                console.log("Enter");
                return false;
            }
        });

Вывод в консоли при вводе «A Enter B» на клавиатуре:

keydown (65)
keypress (97)
keyup (65)

keydown (13)
enter
keyup (13)
enter

keydown (66)
keypress (98)
keyup (66)

Вы видите, что во второй последовательности «нажатие клавиши» отсутствует, но нажатие / отпускание клавиш и код регистра «13» являются нажатыми / отпускаемыми. Согласно документации jQuery по функции keypress ():

Note: as the keypress event isn't covered by any official specification, the actual behavior encountered when using it may differ across browsers, browser versions, and platforms.

Протестировано в IE11 и FF61 на Server 2012 R2

person Piemol    schedule 24.08.2018
comment
Только что протестировал его на Chrome 90, Edge 90 и FF88. Спасибо! - person Mariano Luis Villa; 24.05.2021

Возможно, уже поздно, но вы можете добавить строку ниже в html: -

<input onkeyup="submitForm(event)" oninput="addTextName(this)" type="text" id="name-val">

и добавьте это в файл js

function submitForm(e) {
var keyCode = e.keyCode ? e.keyCode : e.which;
if (keyCode == 13){
    toggleNextScreen();
}

}

код 13 означает ввод

person alihussain kabri    schedule 23.03.2021

В HTML-кодах:

<form action="POST" onsubmit="ajax_submit();return false;">
    <b>First Name:</b> <input type="text" name="firstname" id="firstname">
    <br>
    <b>Last Name:</b> <input type="text" name="lastname" id="lastname">
    <br>
    <input type="submit" name="send" onclick="ajax_submit();">
</form>

В кодах Js:

function ajax_submit()
{
    $.ajax({
        url: "submit.php",
        type: "POST",
        data: {
            firstname: $("#firstname").val(),
            lastname: $("#lastname").val()
        },
        dataType: "JSON",
        success: function (jsonStr) {
            // another codes when result is success
        }
    });
}
person mghhgm    schedule 29.09.2017
comment
Пожалуйста, не публикуйте одинаковые ответы на несколько вопросов. Опубликуйте один хороший ответ, затем проголосуйте / отметьте, чтобы закрыть другие вопросы как дубликаты. Если вопрос не повторяется, адаптируйте свои ответы к вопросу. - person Paul Roub; 29.09.2017
comment
@PaulRoub мой ответ немного отличается от другого. - person mghhgm; 29.09.2017
comment
Чем этот ответ отличается от этого или этого < / а>? - person Paul Roub; 29.09.2017
comment
@PaulRoub У меня есть эта проблема, и сначала поищите это в Google. На этих страницах рассказывается об этой проблеме, но не просто. Когда я нашел лучший ответ, я решил поделиться этим на страницах, о которых говорят, чтобы помочь пользователям при поиске этого, см. Мой ответ на некоторых похожих страницах stackoverflow. - person mghhgm; 29.09.2017
comment
этот ответ вообще не имеет отношения к вопросу - person Zoltán Süle; 22.11.2018

Попробуй это:

var form = document.formname;

if($(form).length > 0)
{
    $(form).keypress(function (e){
        code = e.keyCode ? e.keyCode : e.which;
        if(code.toString() == 13) 
        {
             formsubmit();
        }
    })
}
person nigitza    schedule 12.09.2012
comment
Это неудобно смешивает jquery с ванильным javascript и включает действительно странный состав, который просто сбивает с толку - person moopet; 20.09.2012