Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: b. e. hollenbeckОтветов: 12

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

Я пытался:

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

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

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

javascriptformshtmljquerywebkit

Ответы

Ответ 1 · рейтинг 420 · NoBrainer

$('.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().

Ответ 2 · рейтинг 174 · bendewey

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

e.preventDefault();

Ответ 3 · рейтинг 83 · karim79

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

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

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

Ответ 4 · рейтинг 61 · Jason Cohen

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

Ответ 5 · рейтинг 30 · Zack The Human

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

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

<input type="submit" />

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

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

Ответ 6 · рейтинг 15 · bvaughn

Вот способ сделать это как плагин 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
    } );

Ответ 7 · рейтинг 12 · GERV

Вы также можете просто добавить 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.

Ответ 8 · рейтинг 5 · Hoàng Vũ Tgtt

Это мой код:

  $("#txtMessage").on( "keypress", function(event) {
    if (event.which == 13 && !event.shiftKey) {
        event.preventDefault();
        $("#frSendMessage").submit();
    }
    });

Ответ 9 · рейтинг 4 · Logan Serman

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

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

if (c == 13) ...

Ответ 10 · рейтинг 3 · Joem Maranan

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

Например:

<form action="submit.php" method="post">
Name : <input type="text" name="test">
<input type="submit" style="display: none;">
</form>

Ответ 11 · рейтинг 3 · faebser

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

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

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

Ответ 12 · рейтинг 2 · Piemol

Сегодня я узнал, что событие нажатия клавиши не запускается при нажатии клавиши 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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы