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

369

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

Я пробовал:

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

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

  • 3
    У вас действительно есть атрибут class = "input" на вашем <input ...? Похоже, это должно быть $ ('input'). Keypress ...
  • 0
    Классы генерируются программно CMS. Однако, кроме этого, выбор значения $ ('input') повлияет на каждый ввод на странице, независимо от того, хотел я поведение или нет. Извините, это оскорбляет ваши чувства.
Показать ещё 2 комментария
Теги:
html-form
webkit

13 ответов

305
Лучший ответ
$('.input').keypress(function (e) {
  if (e.which == 13) {
    $('form#login').submit();
    return false;    //<---- Add this line
  }
});

ПРИМЕЧАНИЕ. Вы приняли ответ bendewey, но это неверно с описанием e.preventDefault(). Проверьте этот ответ stackoverflow: event.preventDefault() vs. return false

По существу, "return false" совпадает с вызовом e.preventDefault и e.stopPropagation().

  • 3
    Обратите внимание, что они не одинаковы. IE8 не имеет e.preventDefault. Для IE8 используйте event.returnValue = false;
  • 8
    @mbokil За исключением того, что при использовании jQuery то же самое в IE8. и IE7. И IE6.
Показать ещё 1 комментарий
177

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

e.preventDefault();
  • 7
    Это не верно. Обратитесь к моему ответу ниже.
  • 11
    как сказал @NoBrainer, это неправильно: return false в событии, управляемом jQuery, автоматически вызывать e.preventDefault ()
78

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

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

Примечание: jQuery ('# submit'). focus() заставляет кнопку анимировать кнопку при нажатии кнопки.

  • 1
    Прекрасно работает, но мне пришлось добавить «вернуть ложь»; предотвратить двойную форму подачи.
  • 0
    Рабочая | Посмотрите МНОГО результатов, таких как этот разговор о триггере, sendkey и т. Д., До, бла ..., но это единственное, что мне подходит, и действительно нажмите кнопку. Не отправлять (). Таким образом, фокус был в функциях focus (). Click (). БЛАГОДАРЮ ВАС.
Показать ещё 1 комментарий
60

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

26

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

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

<input type="submit" /> 

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

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

  • 1
    Полностью согласен. Я всегда предпочел бы использовать встроенную функциональность браузера (входные данные типа = отправка нативно реагируют на нажатие клавиши ввода), а не добавлять дополнительные скриптовые файлы.
  • 1
    Проблема в том, что, если вы делаете Ajax, и нет фактической обратной передачи на сервер, но вы хотите, чтобы пользовательский интерфейс вел себя так, как ожидает пользователь?
Показать ещё 1 комментарий
13

Здесь вы можете сделать это как плагин JQuery (если вы хотите повторно использовать функциональность):

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

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

Теперь, если вы хотите украсить этот тип функциональности, он прост как это:

$('#your-input-id').onEnterKey(
    function() {
        // Do stuff here
    } );
12

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

4

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

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

if (c == 13) ...
  • 7
    Это уже нормализовано с помощью jQuery
3

Это мой код:

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

Теперь я использую

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

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

1

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

Например:

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

В 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
        }
    });
}
  • 1
    Пожалуйста, не публикуйте одинаковые ответы на несколько вопросов. Отправьте один хороший ответ, затем проголосуйте / пометьте, чтобы закрыть другие вопросы как дубликаты. Если вопрос не является дубликатом, адаптируйте свои ответы на вопрос.
  • 0
    @PaulRoub мой ответ имеет некоторую разницу с другим.
Показать ещё 3 комментария
-5

//попробуйте этот код ниже;  // надеюсь, что это может помочь;

    var form =  document.formname;

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню