JavaScript обнаружение контекста нажатия клавиш (выбор истории формы против отправки формы) - PullRequest
3 голосов
/ 06 января 2009

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

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

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

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 11 января 2009

Установите атрибут autocomplete в ваших текстовых полях на off:

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

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

2 голосов
/ 06 января 2009

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

0 голосов
/ 07 июня 2010

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

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