Предположим, элемент DOM имеет фокус. Есть ли способ предпринять действие X , если пользователь нажимает , введите , и событие click
будет запущено, но выполнить действие Y , если элемент click
редактируется любым другим способом, кроме нажатия , ввода ?
- Подробнее -
Я использую jQuery Плагин (bootstrap -выберите ), который я не могу контролировать. Этот плагин регистрирует события click
для элементов в DOM. Теперь я хочу изменить поведение, чтобы до запуска зарегистрированного обработчика события click
происходили дополнительные действия в зависимости от того, как было инициировано событие.
Я предложил два подхода, каждый из которых требует регистрации. для событий mouseup
и keydown
.
Задайте глобальную переменную из обработчиков событий mouseup
и keydown
, чтобы кэшировать свойства события, а затем получить доступ к этой глобальной переменной в обработчик click
. Поскольку нет никаких гарантий относительно того, что запускает обработчик click
, я должен установить тайм-аут, чтобы очистить эту глобальную переменную. Это создает проблемы с многопоточностью.
Жесткий код событий, которые, я думаю, вызовут событие click
. Исходя из опыта, это происходит, когда либо e.type == 'mouseup' && e.button == 0
, либо e.type == 'keydown' && (e.keyCode == 13 || e.keyCode == 32)
. Проблема с этим логом c заключается в том, что предполагается, что это единственный способ запуска обработчика события click
. Я мог бы предположить, что некоторые пользовательские агенты позволяют изменять ключи, которые в конечном итоге отправляют событие click
базовому объекту. Возможно, у сенсорных экранов есть какое-то другое событие, которое вызывается при нажатии на элемент DOM.
Уточненная версия моего вопроса заключается в том, есть ли какой-либо способ ...
- Убедитесь, что эти
mouseup
/ keydown
события являются единственными, которые приводят к событию щелчка? - Отключите существующие обработчики
click
и вручную вызовите их из моего нового mouseup
/ keydown
обработчик события? - Надежно определить событие, которое вызвало событие
click
(например, каким-либо образом получить доступ к атрибутам keyCode
/ button
для инициирующего события)?