У меня одна кнопка в li с id "my_id"
. Я прикрепил к этому элементу два события jQuery
1.
$("#my_id").click(function() {
alert('single click');
});
2.
$("#my_id").dblclick(function() {
alert('double click');
});
Но каждый раз это дает мне single click
javascript
jquery
jquery-events
user426795
источник
источник
Ответы:
Вам нужно использовать тайм-аут, чтобы проверить, есть ли еще один щелчок после первого щелчка.
Вот уловка :
Использование:
РЕДАКТИРОВАТЬ:
Как указано ниже, лучше использовать собственное
dblclick
событие: http://www.quirksmode.org/dom/events/click.htmlИли тот, который предоставляется jQuery: http://api.jquery.com/dblclick/
источник
dblclick
событие,dblclick
это определенно правильный путь сегодня. jQuery также обрабатывает это событие: api.jquery.com/dblclickevent.detail
доступно, это лучший способ обнаружить двойной щелчок в обработчике щелчков. Смотрите этот ответ .Поведение
dblclick
события объясняется в Quirksmode .Порядок событий для a
dblclick
:Единственным исключением из этого правила является (конечно) Internet Explorer с их настраиваемым порядком:
Как видите, одновременное прослушивание обоих событий в одном элементе приведет к дополнительным вызовам вашего
click
обработчика.источник
dblclick
, даже надежно ... если я щелкну один раз ... подождите секунду или две, затем щелкните еще раз, я получаюdblclick
событие при втором щелчке!event.detail
доступно, это лучший способ обнаружить двойной щелчок в обработчике щелчков. Смотрите этот ответ .Оказывается, вместо использования дополнительных состояний и setTimeout есть собственное свойство, к
detail
которому вы можете получить доступ изevent
объекта!Современные браузеры и даже IE-9 это поддерживают :)
Источник: https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/detail
источник
event.detail === 1
прежнему срабатывает одиночный щелчок (где ). См. Мою скрипку или этот комментарий в этой ветке .if(evt.detail !== 1) return;
отклонения случайного двойного щелчки заблокируют доступ к этой кнопке для пользователей без мыши.Простая функция. Никаких jquery или других фреймворков не требуется. Передайте свои функции как параметры
источник
el.dataset.dblclick
было бы более приятным способом сделать это сейчас.event.detail
доступно, это лучший способ обнаружить двойной щелчок в обработчике щелчков. Смотрите этот ответ .Боюсь, что поведение зависит от браузера:
http://api.jquery.com/dblclick/
При запуске вашего кода в Firefox предупреждение () в
click()
обработчике не позволяет вам щелкнуть второй раз. Если вы удалите такое предупреждение, вы получите оба события.источник
event.detail
доступно, это лучший способ обнаружить двойной щелчок в обработчике щелчков. Смотрите этот ответ .Итак, чтобы дважды щелкнуть (дважды щелкнуть), вы должны сначала щелкнуть один раз. В
click()
пожарах обработчика на первый щелчок, и так как предупреждение всплывает, вы не имеете шанс сделать второй щелчок , чтобы стрелять вdblclick()
обработчик.Измените свои обработчики так, чтобы они выполняли что-то иное, кроме как,
alert()
и вы увидите поведение. (возможно, изменить цвет фона элемента):источник
Этот ответ со временем устарел, проверьте решение @kyw.
Я создал решение, вдохновленное сутью, опубликованной @AdrienSchuler. Используйте это решение только в том случае, если вы хотите привязать к элементу одиночный И двойной щелчок. В противном случае рекомендую использовать родные
click
иdblclick
слушатели.Вот отличия:
setTimeout
обработки обработчика щелчка или двойного щелчкаJavascript:
Использование:
Ниже показано использование в jsfiddle, кнопка jQuery - это поведение принятого ответа.
jsfiddle
источник
Еще одно простое решение Vanilla, основанное на ответе A1rPun (см. Его скрипку для решения jQuery, и оба находятся в этом ).
Кажется, что, чтобы НЕ запускать обработчик одного щелчка, когда пользователь дважды щелкает, обработчик одного щелчка обязательно запускается после задержки ...
источник
event.detail
доступно, это лучший способ обнаружить двойной щелчок в обработчике щелчков. Смотрите этот ответ .Вот альтернативный код jeum для произвольного количества событий:
Это нужно для приложения cytoscape.js .
источник
this
элементу, на который был выполнен щелчок, и передать ее обработчику (вместеe
или вместо него).Как отличить одиночный клик от двойного клика по одному и тому же элементу?
Если вам не нужно смешивать их, вы можете рассчитывать на
click
иdblclick
каждый будет делать свою работу очень хорошо.Проблема возникает при попытке смешивать их: событие будет на самом деле вызвать событие , а также , так что вы должны определить , одним нажатием кнопки , является ли «автономным» одним щелчком мыши, или частью двойного щелчка.
dblclick
click
Вдобавок: нельзя использовать оба
click
иdblclick
в одном и том же элементе :А теперь к хорошим новостям:
Вы можете использовать
detail
свойство события, чтобы определить количество кликов, связанных с событием. Это позволяетclick
легко обнаружить двойные щелчки внутри .Остается проблема обнаружения одиночных щелчков и того, являются ли они частью двойного щелчка. Для этого мы снова используем таймер и
setTimeout
.Собирая все это вместе, с использованием атрибута данных (чтобы избежать глобальной переменной) и без необходимости самостоятельно подсчитывать клики, мы получаем:
HTML:
JavaScript:
Демо:
JSfiddle
Примечания о доступности и скорости двойного щелчка:
Потребовалось время, чтобы найти удовлетворительное решение, надеюсь, это поможет!
источник
Используйте отличный плагин jQuery Sparkle. Плагин дает вам возможность определять первый и последний щелчок. Вы можете использовать его, чтобы различать щелчок и dblclick, определяя, последовал ли за другим щелчком первый щелчок.
Проверьте это на http://balupton.com/sandbox/jquery-sparkle/demo/
источник
Я написал простой плагин jQuery, который позволяет вам использовать настраиваемое событие singleclick, чтобы отличать одиночный щелчок от двойного щелчка:
https://github.com/omriyariv/jquery-singleclick
источник
Современный правильный ответ - это смесь принятого ответа и решения @kyw. Вам нужен тайм-аут, чтобы предотвратить этот первый щелчок, и
event.detail
проверка, чтобы предотвратить второй щелчок.источник
Мне нравится избегать jquery (и других библиотек размером 90-140 тыс.), И, как уже отмечалось, браузеры сначала обрабатывают onclick, поэтому вот что я сделал на созданном мной веб-сайте (этот пример также касается получения локального xy местоположения по щелчку)
надеюсь, это поможет
источник
Основываясь на ответе Адриена Шулера (большое спасибо !!!), для Datatables.net и для многих пользователей, вот модификация:
Функция
Использовать
источник
это сработало для меня -
использование-
источник
Просто отправьте собственный HTML-ответ на всякий случай, если нужно, чтобы он был простым и HTML.
Это, конечно, имеет собственные параметры JQuery. т.е. ...
$('#id').attr('ondblclick',function(){...})
или, как указано ранее,$('#id').dblclick(function(){...});
источник
Я знаю, что это устарело, но ниже представлен только JS-пример простого счетчика цикла с одним таймером для определения одиночного или двойного щелчка. Надеюсь, это кому-то поможет.
источник