JavaScript Определить причину для события клика - PullRequest
0 голосов
/ 05 марта 2020

Предположим, элемент DOM имеет фокус. Есть ли способ предпринять действие X , если пользователь нажимает , введите , и событие click будет запущено, но выполнить действие Y , если элемент click редактируется любым другим способом, кроме нажатия , ввода ?

- Подробнее -

Я использую jQuery Плагин (bootstrap -выберите ), который я не могу контролировать. Этот плагин регистрирует события click для элементов в DOM. Теперь я хочу изменить поведение, чтобы до запуска зарегистрированного обработчика события click происходили дополнительные действия в зависимости от того, как было инициировано событие.

Я предложил два подхода, каждый из которых требует регистрации. для событий mouseup и keydown.

  1. Задайте глобальную переменную из обработчиков событий mouseup и keydown, чтобы кэшировать свойства события, а затем получить доступ к этой глобальной переменной в обработчик click. Поскольку нет никаких гарантий относительно того, что запускает обработчик click, я должен установить тайм-аут, чтобы очистить эту глобальную переменную. Это создает проблемы с многопоточностью.

  2. Жесткий код событий, которые, я думаю, вызовут событие click. Исходя из опыта, это происходит, когда либо e.type == 'mouseup' && e.button == 0, либо e.type == 'keydown' && (e.keyCode == 13 || e.keyCode == 32). Проблема с этим логом c заключается в том, что предполагается, что это единственный способ запуска обработчика события click. Я мог бы предположить, что некоторые пользовательские агенты позволяют изменять ключи, которые в конечном итоге отправляют событие click базовому объекту. Возможно, у сенсорных экранов есть какое-то другое событие, которое вызывается при нажатии на элемент DOM.

Уточненная версия моего вопроса заключается в том, есть ли какой-либо способ ...

  1. Убедитесь, что эти mouseup / keydown события являются единственными, которые приводят к событию щелчка?
  2. Отключите существующие обработчики click и вручную вызовите их из моего нового mouseup / keydown обработчик события?
  3. Надежно определить событие, которое вызвало событие click (например, каким-либо образом получить доступ к атрибутам keyCode / button для инициирующего события)?
...