Обнаружение JavaScript контекста нажатия клавиши (выбор истории формы по сравнению сформа отправки)

StackOverflow https://stackoverflow.com/questions/416220

Вопрос

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

План состоит в том, чтобы Шаблоны jTemplates шаблон содержит поля, мой плагин просматривает шаблон, чтобы найти любые требуемые многоязычные ресурсы, запрашивает их с сервера, а затем упаковывает все в объект JavaScript, который затем передается пользовательской функции при "отправить".

Все работает нормально, за исключением стандартного кода "при нажатии enter отправьте форму", который вам нужно выполнить, когда вы подделываете форму:

opts.coreElement.find('input[type=text]').keypress(function(evt) {
    if ((evt.keyCode || evt.which) == 13) {
        opts.coreElement.find('.saveButton').click();
    }
});

Проблема в том, что в Firefox (по крайней мере;Я еще не проверял другие браузеры), если вы ранее вводили информацию в текстовое поле с аналогичным именем, вы получите историю своей формы.Если затем вы выберете одно из этих предложенных значений, нажав enter, форма будет отправлена.Не очень хорошо, если вы находитесь на первом входе на страницу.На самом деле это довольно раздражает.

Очевидным решением, по-видимому, является вставка элемента формы вокруг полей и прекращение любой возможной отправки этой фиктивной формы через jQuery.К счастью, у меня есть роскошь делать это, поскольку я работаю в ASP.NET MVC, но что, если бы это было не так?Что, если мой плагин не знал, был ли он уже внутри формы, и поэтому должен был оставаться при себе?Что, если бы я был в стандартных веб-формах ASP.NET и я имел вручную "нацеливать" клавишу возврата каждого ввода на правильную кнопку отправки?

Есть ли способ, возможно, через сам объект event, определить контекст нажатия клавиши, чтобы я мог отфильтровать выбор элементов истории формы?

Это было полезно?

Решение

Установите autocomplete укажите в своих текстовых полях значение off:

opts.coreElement.find('input[type=text]').each(function() {
     $(this).attr('autocomplete', 'off');
});

Это работает для всех основных браузеров (Safari, Firefox, IE).

Другие советы

Я обнаружил, что для того, чтобы предотвратить действие по умолчанию для события клавиши [enter] или [tab], вы должны прослушать событие keydown и обработать / отменить его.
К моменту срабатывания keyup или нажатия клавиши значение по умолчанию для keydown уже установлено.

Ответ от wulong работает, но он не дал полного ответа на вопрос.Предлагаемое решение заключается в отключении истории ввода текстового поля.Но есть ли способ узнать , происходит ли событие нажатия клавиши из входного текста или из истории?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top