Firefox автозаполнение 'Enter' нажатие клавиши при автозаполнении запуска введите в текстовом поле - PullRequest
11 голосов
/ 24 февраля 2012

У меня есть форма с некоторыми общими полями, такими как «электронная почта». У меня есть JavaScript, который ловит ключ возврата (13) и отправляет форму, но тот же эффект наблюдался при использовании свойства defaultButton на панели хоста.

Если пользователь работает в IE и вводит свой адрес электронной почты, затем выбирает элемент из встроенного автозаполнения браузера, нажав клавишу ВВОД, нажатие клавиш не отправляется в Javascript. ХОРОШО.

Однако в Firefox текстовое поле получает нажатие клавиши ВВОД и хочет отправить форму, которая не заполнена.

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

Я использую asp.net и jQuery.

Изменить - уточнить: Нажатие Enter на элементе в автозаполнении НЕ должно отправлять форму. Поведение IE корректно (на этот раз!).

Мой обработчик событий сам по себе просто:

при нажатии клавиши вверх (также пытался нажать клавишу) - if (e.which == 13) submitForm ();

Проблема в том, что я не знаю, как определить, что нажатие клавиши ENTER на самом деле происходило из управления автозаполнением

Ответы [ 2 ]

2 голосов
/ 06 марта 2013

Вы можете сохранить значение поля при нажатии клавиши вниз, а затем снова проверить при нажатии клавиши вверх. Если в строке более одного символа отличается от нажатия одной клавиши, можно предположить, что был выбран элемент автозаполнения, и ввод следует игнорировать.

Единственный случай, когда это не сработает, это когда у вас есть поле наподобие: email@test.co, и вы выбираете элемент автозаполнения с добавлением только последнего письма, клавиша ввода непреднамеренно отправит форму.

Надеюсь, что это поможет нам начать, по крайней мере. Я пытаюсь найти и пуленепробиваемое решение. Я буду обновлять, если я найду один.

EDIT

Винт выше. Разобрался. Если вы проверяете наличие клавиши ввода при нажатии клавиши up, а значение поля ввода не совпадает при нажатии клавиши вверх / вниз, можно предположить, что выбран элемент автозаполнения.

var loginCurrentInput = '';

$('input').keydown(function(e) {

  loginCurrentInput = $(this).val();

}

$('input').keyup(function(e) {

  //if enter key pressed
  if(e.keyCode == 13) {

    //check for changed input value
    if($(this).val() != loginCurrentInput) {

      loginCurrentInput = $(this).val();
      return false;

    }

    $('#button').trigger('click');

  }

}
1 голос
/ 17 января 2013

При нажатии клавиши ввода вы можете проверить, какой элемент находится в фокусе:

$("*:focus")

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...