2009-02-03 3 views
2

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

Есть ли способ, чтобы подавить эти события для ввода/TEXTAREA поля так, чтобы не мешать печатать?
Я использовал некоторые хаки с условиями, основанными на селекторах элементов, но они имели большое влияние на производительность, поскольку они были запущены на каждом нажатии.

(Некоторые из этих полей создаются динамически, что вне моего контроля - возможно, это отношение.)

+0

[подключение к моей зарегистрированной учетной записи] – AnC

ответ

3

Создание обработчика OnFocus для всех входных и прокручиваемым, который устанавливает некоторую глобальную переменную, указывающую, что события клавиатуры следует игнорировать. Создайте другой обработчик для события размытия, чтобы сбросить глобальную переменную.

var DISABLE_KEY_HANDLERS = false; 

$('input[type=text], input[type=password], textarea').focus(function(){ 
    DISABLE_KEY_HANDLERS = true 
}) 

$('input[type=text], input[type=password], textarea').blur(function(){ 
    DISABLE_KEY_HANDLERS = false 
}) 

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

+0

Спасибо! Проблема, однако, в динамически создаваемых элементах; Я должен будет повторно запустить указанный код всякий раз, когда создается новое поле ввода, которое не поддается контролю. Тем не менее, это помогает, и, возможно, я могу найти обходной путь для динамических частей ... – 2009-02-03 18:17:40

+0

Вы должны заглянуть в плагин livequery: http://plugins.jquery.com/project/livequery/ – Zach

+0

Это выглядит многообещающим - многие благодаря! – 2009-02-03 18:35:48

1

Оказывается, событие уже предоставляет мне все, что мне нужно; ev.target является активным элементом DOM, поэтому я могу проверить, является ли это поле ввода.

Смежные вопросы