Препятствуйте тому, чтобы событие щелчка стреляло, когда dblclick событие будет стрелять

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

32
задан Brian Tompsett - 汤莱恩 25 August 2019 в 10:03
поделиться

3 ответа

В комментарии вы сказали:

Я откладываю обработчик кликов на 300 мс (заметная и раздражающая задержка) и даже ...

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

Чтобы реализовать эту функцию, когда вы щелкаете, DOM должна быть в состоянии предсказать, будет ли это последний щелчок или это будет s первый двойной щелчок (однако я не думаю, что в целом DOM может предсказать, собирается ли пользователь щелкнуть снова).


Какие два различных действия вы пытаетесь предпринять по щелчку и двойному щелчку? IMO, в обычном приложении вам могут понадобиться оба события: например, одиночный щелчок для фокусировки на элементе, а затем двойной щелчок для его активации.

Когда вы должны разделить события, некоторые приложения используют что-то другое, кроме двойного щелчка: например, они используют щелчок правой кнопкой мыши или щелчок при нажатой клавише Control.

15
ответ дан 27 November 2019 в 20:38
поделиться

В этом случае лучше всего немного отложить выполнение события одиночного щелчка. Попросите обработчика двойного щелчка установить переменную, которую будет проверять событие одиночного щелчка. Если эта переменная имеет определенное значение, может быть boolDoubleClick == true , тогда не запускайте / обрабатывайте одиночный щелчок.

6
ответ дан 27 November 2019 в 20:38
поделиться

AFAIK DOM Level 2 Events не содержит спецификации для двойного щелчка. У меня это не работает в IE7 (шок), но у FF и Opera нет проблем с управлением спецификацией, где я могу прикрепить все действия к событию щелчка, но для двойного щелчка просто подождите, пока атрибут "detail" объекта события - 2. Из документации: «Если в одном и том же месте экрана происходит несколько щелчков мышью, последовательность повторяется с атрибутом подробностей, увеличивающимся с каждым повторением».

3
ответ дан 27 November 2019 в 20:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: