Firefox autocomplete 'enter' keypress при запуске автозаполнения введите в текстовое поле
У меня есть форма с некоторыми обычными полями, например "электронная почта". У меня есть javascript, который ловит ключ возврата (13) и отправляет форму, но тот же эффект наблюдался при использовании свойства defaultButton на панели хоста.
Если пользователь находится в IE и набирает свой адрес электронной почты, затем выбирает элемент из встроенного автозаполнения браузера, нажимая ENTER, в Javascript не поступает нажатие клавиши. ХОРОШО.
В Firefox однако текстовое поле получает нажатие клавиши ENTER и хочет отправить форму, которая не завершена.
Кто-нибудь знает, как остановить это, кроме как отключить автозаполнение? Я не могу найти способ обнаружить, что нажатие клавиши действительно происходит из автоматического полного списка.
Я использую asp.net и jQuery.
Изменить - уточнить:
При нажатии на элемент в автозаполнении НЕ следует отправить форму. Поведение IE правильное (на один раз!).
Мой обработчик событий сам по себе просто:
на клавише вверх (тоже попробовал нажать клавишу) - if (e.which == 13) submitForm();
Проблема в том, что я не знаю, как обнаружить, что нажатие ENTER на самом деле произошло из управления автозаполнением
Ответы
Ответ 1
Вы можете сохранить значение поля на клавише вниз, а затем снова проверить ключ. Если в строке с одним нажатием клавиши более 1 символ отличается от другого, можно предположить, что элемент автозаполнения был выбран, а ввод должен быть проигнорирован.
Единственный случай, когда это не сработает, - это когда у вас есть поле типа: [email protected], и вы выбираете элемент автозаполнения с добавленным только окончательным письмом, клавиша ввода будет непреднамеренно представлять форму.
Надеюсь, что мы начнем как минимум. Я также пытаюсь разобраться в пуленепробиваемом решении. Я обновлю, если найду его.
ИЗМЕНИТЬ
Винт выше. Отсортировано. Если вы проверите клавишу ввода на клавише вверх, а значение поля ввода не совпадает с двумя клавишами вниз/вверх, вы можете предположить, что был выбран элемент автозаполнения.
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');
}
}
Ответ 2
При нажатии клавиши ввода вы можете проверить, что представляет собой текущий элемент в фокусе:
$("*:focus")
если элемент не с включенным аутокомплексом, вы можете отправить свою форму.
взгляните на:
Как выбрать элемент, который сфокусирован на нем с помощью jQuery