Надіславши форму у "Enter" за допомогою jQuery?


427

У мене є стандартна форма реєстрації - текстове поле електронної пошти, поле пароля та кнопка подання для проекту 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').
Натискання

Класи генеруються програмно CMS. Однак, окрім цього, розміщення його на $ ('input') вплине на кожен вхід на сторінці, незалежно від того, хотів я поведінку чи ні. Вибачте, це ображає ваші почуття.
бути hollenbeck

15
Чутливості не ображаються ні принаймні. Просто подумав, що це може бути недогляд, який призведе до проблеми. Продовжуй.
NexusRex

1
FYI: Ваша прийнята відповідь не зовсім точна. Дивіться мою відповідь нижче.
NoBrainer

Відповіді:


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

Перевірте цю відповідь stackoverflow : event.preventDefault () vs. return false

По суті, "повернути помилкове" - це те саме, що називати e.preventDefaultі e.stopPropagation().


3
Зауважте, вони не однакові. У IE8 немає e.preventDefault. Для IE8 використовуйте event.returnValue = false;
mbokil

8
@mbokil За винятком того, що при використанні jQuery, це те саме в IE8. і IE7. І IE6.
Кевін Б

Якщо ви хочете ввести спочатку в поля введення, поставте "return false;" всередині оператора if.
Juni Brosas

173

Крім повернення помилкових, як згадував Джейсон Коен. Можливо, вам доведеться також запобігтиDefault

e.preventDefault();

13
як сказав @NoBrainer, це неправильно: return falseу випадку, коли керує jQuery автоматично викликати e.preventDefault ()
Ріккардо Галлі

83

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

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

Примітка: jQuery ('# submit'). Focus () робить кнопку анімацією при натисканні клавіші Enter.


2
Чудово працює, але мені довелося додати "return false;" щоб запобігти подвійній подачі форми.
код90

Робоча | Дивіться багато таких результатів, що говорять про тригер, sendkey тощо, doh, blah ..., але це для мене єдине, і я дійсно надсилаю клацання на кнопку. Не надсилати (). Отже, хитрість полягала в функції focus (). Click () в безпеці. ДЯКУЮ ТОБІ.
м3нда

Працює, але мені довелося поставити цей код під: $ (document) .ready (function () {...
shasi kanth


30

Чи є причина, що вам доведеться підключити і перевірити ключ введення?

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

<input type="submit" /> 

до вашої форми і чи буде вона, природно, подана, коли натискання клавіші Enter Ви навіть можете підключити дію форми onsubmitі викликати звідти функцію перевірки, якщо хочете ...

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


1
Повністю згоден. Моїм вподобанням завжди було б використовувати нативної функціональності веб-переглядача (вхід типу = надіслати відповідь на натиск клавіші введення), а не додавати додаткові скриптовані сценарії ..
Аарон

1
Проблема полягає в тому, що, якщо ви робите файли ajax, і на сервері немає фактичної поштової віддачі, але ви хочете, щоб інтерфейс користувача поводився так, як очікує користувач?
devlord

Справді ... Я все це пропустив return false;.
devlord

14

Ось спосіб зробити це як плагін 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
    } );

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


Він не працює в Chrome. Подамо все одно.
Марсело Агімовель

5

Це мій код:

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

4

Щоб зберегти доступність, вам слід скористатися цим для визначення вашого ключового коду:

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

if (c == 13) ...

3

Просто додавання для легкої реалізації. Ви можете просто зробити форму, а потім зробити приховану кнопку подання:

Наприклад:

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

@cebirci і в якій версії ваш хром? Я протестував від ноутбуків до ПК, і мій код просто працює. Спробуйте завантажити найновіший хром, перш ніж ви позначите його моєю відповіддю.
Джоем Маранан

2

Я зараз користуюся

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

Спочатку я додав у кнопку подання події eventhandler, який створив для мене помилку.


1

Сьогодні я з’ясував, що подія натискання клавіші не спрацьовує при натисканні клавіші 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 на функціональній клавіші () :

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 на сервері 2012 R2


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
Не публікуйте однакових відповідей на кілька запитань. Опублікуйте одну добру відповідь, а потім проголосуйте / позначте, щоб закрити інші питання як дублікати. Якщо питання не є дублікатом, підготуйте свої відповіді на питання.
Пол Руб

@PaulRoub моя відповідь має певну різницю з іншою.
mghhgm

Чим ця відповідь відрізняється від цього чи цього ?
Пол Руб

@PaulRoub У мене є ця проблема і спочатку шукаю Google для цього. Ці сторінки, говорять про цю проблему, але не просто. Коли я знаходжу найкращу відповідь, я вирішив поділитися цим вмістом на тих сторінках, де розмовляють, щоб допомогти користувачам шукати це, побачити мою відповідь на деяких подібних сторінках stackoverflow.
mghhgm

1
ця відповідь взагалі не пов’язана з питанням
Zoltán Süle

-4

Спробуйте це:

var form = document.formname;

if($(form).length > 0)
{
    $(form).keypress(function (e){
        code = e.keyCode ? e.keyCode : e.which;
        if(code.toString() == 13) 
        {
             formsubmit();
        }
    })
}

9
Це змішування jquery з ванільним javascript незручним способом і включає дійсно дивний
склад,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.