Общее решение для отправки ожидаемой HTML-формы, когда используется клавиша [Enter] и присутствует несколько форм? - PullRequest
2 голосов
/ 27 июня 2011

На основании этого вопроса Stackoverflow похоже, что не существует определенного стандартного поведения или общей реализации в разных браузерах для нажатия клавиши [Enter] в поле формы HTML, когда на странице присутствует несколько форм. Мне бы хотелось, чтобы решение jQuery обнаруживало [Enter] в любом поле формы, обнаруживало его немедленно включающую форму и кнопку .click () этой формы.

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

Я ищу универсальное решение , например плагин jQuery, которое можно применить к нескольким веб-сайтам, имеющим эту проблему, и сразу же вступить в силу для отправки ожидаемой формы. Я не хочу кодировать условные заявления или изменять их для каждой формы или веб-сайта.

Необязательное обновление:
Для более подробного сценария рассмотрим, что каждая форма имеет только одну кнопку типа = Отправить, и это кнопка по умолчанию / цель
Любые другие кнопки в форме являются кнопкой типа = и не рассматриваются для отправки.

Ответы [ 3 ]

1 голос
/ 27 июня 2011

Обычный даже для обнаружения ввода:

        $(document).keydown(function(objEvent) {
            if (objEvent.keyCode == 13) {
                 $('.click-button').click();
            }
        })

Внутри переменной objEvent есть .target, который вы можете использовать, чтобы увидеть, где был введен ввод.

См. Скрипту здесь: http://jsfiddle.net/maniator/svzeq/ (попробуйте нажать ввод, когда на входе)

Код от скрипки:

$(document).keydown(function(objEvent) {
    if (objEvent.keyCode == 13) {
        alert($(objEvent.target).parent()[0].id + " pressed enter");
    }
});
0 голосов
/ 27 июня 2011

Я использую эту вспомогательную функцию для настройки моего поведения при вводе по умолчанию:

function SetFormDefaultButton(formId, buttonId) {


    var formSelector = "#{0}".format(formId);
    var buttonSelector = "#{0}".format(buttonId);

    $(formSelector).find('input, select').live('keypress', function (event) {

        if (event.keyCode == 13) {
            event.preventDefault();
            $(buttonSelector).click().focus();

            return false;
        }
    });
}
0 голосов
/ 27 июня 2011

Я бы сделал что-то вроде этого:

$('input[type=text]').keydown(function(event){
   if(event.keyCode == 13){
   event.preventDefault();
   $(this).closest('form').submit();
   }
});

когда клавиша возврата нажата внутри поля ввода текста типа, отправляется относительная форма (она не нажимает кнопку отправки, но онапросто отправляет форму)

РЕДАКТИРОВАТЬ - если вы хотите нажать кнопку отправки, вы можете сделать:

  $(this).closest('form').find('input[type=submit]').click()
...