Mam pojedynczy przycisk w li z identyfikatorem "my_id"
. Do tego elementu dołączyłem dwa zdarzenia jQuery
1.
$("#my_id").click(function() {
alert('single click');
});
2.
$("#my_id").dblclick(function() {
alert('double click');
});
Ale za każdym razem daje mi single click
javascript
jquery
jquery-events
user426795
źródło
źródło
Odpowiedzi:
Musisz użyć limitu czasu, aby sprawdzić, czy po pierwszym kliknięciu pojawia się kolejne kliknięcie.
Oto sztuczka :
Stosowanie:
EDYTOWAĆ:
Jak podano poniżej, preferuj
dblclick
zdarzenie natywne : http://www.quirksmode.org/dom/events/click.htmlLub ten dostarczony przez jQuery: http://api.jquery.com/dblclick/
źródło
dblclick
wydarzeniudblclick
to definitywnie droga, którą należy dziś osiągnąć. jQuery obsługuje również to zdarzenie: api.jquery.com/dblclickevent.detail
jest dostępny, jest to najlepszy sposób na wykrycie dwukrotnego kliknięcia z modułu obsługi kliknięcia. Zobacz tę odpowiedź .Zachowanie
dblclick
wydarzenia jest wyjaśnione w Quirksmode .Kolejność zdarzeń dla a
dblclick
jest następująca:Jedynym wyjątkiem od tej reguły jest (oczywiście) Internet Explorer z niestandardową kolejnością:
Jak widać, odsłuchiwanie obu zdarzeń razem na tym samym elemencie spowoduje dodatkowe wywołania programu
click
obsługi.źródło
dblclick
jest nawet niezawodny ... jeśli kliknę raz ... poczekaj sekundę lub dwie, a następnie kliknij ponownie,dblclick
po drugim kliknięciu pojawia się zdarzenie!event.detail
jest dostępny, jest to najlepszy sposób na wykrycie dwukrotnego kliknięcia z modułu obsługi kliknięcia. Zobacz tę odpowiedź .Zamiast wykorzystywać więcej stanów ad-hoc i setTimeout, okazuje się, że istnieje natywna właściwość o nazwie
detail
, do której można uzyskać dostęp zevent
obiektu!Nowoczesne przeglądarki, a nawet IE-9 to obsługują :)
Źródło: https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/detail
źródło
event.detail === 1
) będzie nadal wywoływane. Zobacz moje skrzypce lub ten komentarz w tym wątku .if(evt.detail !== 1) return;
odrzucenia przypadkowego podwójnego kliknięcia zablokują dostęp do tego przycisku użytkownikom bez myszy.Prosta funkcja. Nie jest wymagana żadna jquery ani inny framework. Przekaż swoje funkcje jako parametry
źródło
el.dataset.dblclick
byłoby teraz lepszym sposobem na zrobienie tego.event.detail
jest dostępny, jest to najlepszy sposób na wykrycie dwukrotnego kliknięcia z modułu obsługi kliknięcia. Zobacz tę odpowiedź .Obawiam się, że zachowanie zależy od przeglądarki:
http://api.jquery.com/dblclick/
Uruchamiając kod w przeglądarce Firefox, alert () w
click()
module obsługi zapobiega powtórnemu kliknięciu. Jeśli usuniesz taki alert, otrzymasz oba zdarzenia.źródło
event.detail
jest dostępny, jest to najlepszy sposób na wykrycie dwukrotnego kliknięcia z modułu obsługi kliknięcia. Zobacz tę odpowiedź .Cóż, aby kliknąć dwukrotnie (kliknąć dwa razy), musisz najpierw kliknąć raz. Program
click()
obsługi uruchamia się przy pierwszym kliknięciu, a ponieważ pojawia się alert, nie masz szans na wykonanie drugiego kliknięcia, aby zwolnić programdblclick()
obsługi.Zmień swoje programy obsługi, aby zrobiły coś innego niż an,
alert()
a zobaczysz zachowanie. (być może zmień kolor tła elementu):źródło
Ta odpowiedź z czasem staje się przestarzała, sprawdź rozwiązanie @ kyw.
Stworzyłem rozwiązanie zainspirowane treścią zamieszczoną przez @AdrienSchuler. Użyj tego rozwiązania tylko wtedy, gdy chcesz powiązać pojedyncze kliknięcie ORAZ podwójne kliknięcie z elementem. W przeciwnym razie polecam używanie natywnego
click
idblclick
słuchaczy.Oto różnice:
setTimeout
obsługę kliknięcia lub podwójnego kliknięciaJavaScript:
Stosowanie:
Poniżej znajduje się użycie w jsfiddle, przycisk jQuery to zachowanie zaakceptowanej odpowiedzi.
jsfiddle
źródło
Kolejne proste rozwiązanie Vanilla oparte na odpowiedzi A1rPun (zobacz jego skrzypce dla rozwiązania jQuery, a oba są w tym jednym ).
Wydaje się, że aby NIE wywoływać procedury obsługi pojedynczego kliknięcia, gdy użytkownik kliknie dwukrotnie, procedura obsługi pojedynczego kliknięcia jest koniecznie uruchamiana po opóźnieniu ...
źródło
event.detail
jest dostępny, jest to najlepszy sposób na wykrycie dwukrotnego kliknięcia z modułu obsługi kliknięcia. Zobacz tę odpowiedź .Oto alternatywa dla kodu jeum dla dowolnej liczby zdarzeń:
Potrzebowałem tego do aplikacji cytoscape.js .
źródło
this
, czyli kliknięty element, i przekazać ją do procedury obsługi (oboke
lub zamiast niej).Jak rozróżnić pojedyncze kliknięcia od podwójnych kliknięć tego samego elementu?
Jeśli nie trzeba ich mieszać, na której można polegać
click
idblclick
i każdy będzie wykonać zadanie dobrze.Problem pojawia się, gdy próbuje je wymieszać: zdarzenie rzeczywiście wywołać zdarzenie jako dobrze , więc trzeba określić, czy jedno kliknięcie jest „stand-alone” jedno kliknięcie, lub część podwójnym kliknięciem.
dblclick
click
Ponadto: nie powinieneś używać obu
click
idblclick
na jednym i tym samym elemencie :A teraz dobra wiadomość:
Możesz użyć właściwości zdarzenia,
detail
aby wykryć liczbę kliknięć związanych ze zdarzeniem. To sprawia, że podwójne kliknięcia wewnątrz sąclick
dość łatwe do wykrycia.Pozostaje problem z wykrywaniem pojedynczych kliknięć i tym, czy są one częścią podwójnego kliknięcia. W tym celu wracamy do korzystania z timera i
setTimeout
.Pakując to wszystko razem, z użyciem atrybutu data (aby uniknąć zmiennej globalnej) i bez konieczności samodzielnego liczenia kliknięć, otrzymujemy:
HTML:
JavaScript:
Próbny:
JSfiddle
Uwagi dotyczące dostępności i szybkości podwójnego kliknięcia:
Znalezienie satysfakcjonującego rozwiązania zajęło trochę czasu, mam nadzieję, że to pomoże!
źródło
Skorzystaj z doskonałej wtyczki jQuery Sparkle. Wtyczka umożliwia wykrycie pierwszego i ostatniego kliknięcia. Możesz go użyć do rozróżnienia między kliknięciem a podwójnym kliknięciem, wykrywając, czy po kolejnym kliknięciu nastąpiło pierwsze kliknięcie.
Sprawdź to na http://balupton.com/sandbox/jquery-sparkle/demo/
źródło
Napisałem prostą wtyczkę jQuery, która pozwala na użycie niestandardowego zdarzenia „singleclick” do odróżnienia pojedynczego kliknięcia od dwukrotnego:
https://github.com/omriyariv/jquery-singleclick
źródło
Nowoczesna poprawna odpowiedź to połączenie zaakceptowanej odpowiedzi i rozwiązania @kyw. Potrzebujesz limitu czasu, aby zapobiec pierwszemu kliknięciu i
event.detail
sprawdzeniu, aby zapobiec drugiemu kliknięciu.źródło
Lubię unikać jquery (i innych bibliotek 90-140k), a jak zauważone przeglądarki obsługują najpierw onclick, więc oto co zrobiłem na stronie internetowej, którą utworzyłem (ten przykład obejmuje również uzyskanie klikniętej lokalizacji lokalnej xy)
mam nadzieję, że to pomoże
źródło
Na podstawie odpowiedzi Adrien Schuler (dziękuję bardzo !!!), dla Datatables.net i wielu zastosowań, oto modyfikacja:
Funkcjonować
Posługiwać się
źródło
to zadziałało dla mnie–
stosowanie-
źródło
Wystarczy opublikować natywną odpowiedź HTML na wypadek, gdyby potrzeba była łatwa i HTML.
To oczywiście ma natywne opcje Jquery. tj.…
$('#id').attr('ondblclick',function(){...})
lub, jak wspomniano wcześniej,$('#id').dblclick(function(){...});
źródło
Wiem, że to jest stare, ale poniżej znajduje się tylko przykład JS podstawowego licznika pętli z pojedynczym zegarem, aby określić pojedyncze lub podwójne kliknięcie. Mam nadzieję, że to komuś pomoże.
źródło