Czy istnieje sposób sprawdzenia, czy zdarzenie istnieje w jQuery? Pracuję nad wtyczką, która korzysta z niestandardowych zdarzeń związanych z pseudonimem i chciałbym móc sprawdzić, czy zdarzenie jest powiązane z elementem, czy nie.Sprawdź, czy zdarzenie istnieje w elemencie
Odpowiedz
$('body').click(function(){ alert('test')})
var foo = $.data($('body').get(0), 'events').click
// you can query $.data(object, 'events') and get an object back, then see what events are attached to it.
$.each(foo, function(i,o) {
alert(i) // guid of the event
alert(o) // the function definition of the event handler
});
można sprawdzić przez karmienie odniesienie do obiektu (nie obiekt jQuery choć) do $ .data, a dla drugiego kanału argumentu „Wydarzenia” i że zwróci obiekt zaludnionych ze wszystkich wydarzeń, takich jak " Kliknij'. Możesz przechodzić przez ten obiekt i zobaczyć, co robi program obsługi zdarzeń.
Bardzo podobał mi się twój pierwszy przykład, $ .data (elem, 'events ") dostarcza znacznie więcej informacji. –
Dodałem, że jako komentarz –
Dlaczego po prostu nie użyjesz $ ("body"). Danych ("zdarzenia")? – James
użycie jquery filtr wydarzenie
można go używać jak to
$("a:Event(click)")
Hah, dziękuję, zbudował tę wtyczkę po otrzymaniu odpowiedzi od lekarza kilka miesięcy temu. –
Od wersji 1.8 ta wtyczka już nie działa –
Uwielbiam to, zamieszczając wtyczkę OP stworzoną jako odpowiedź na jego pytanie :) – Andy
napisałem plugin o nazwie hasEventListener który dokładnie robi.
Mam nadzieję, że to pomoże.
Problem polega na tym, jak to działa? Byłem w tym od kilku godzin i wciąż nie jest jasne. Chcę tylko sprawdzić, czy jest na nim zdarzenie kliknięcia i uzyskać powrót boolean, a nie obiekt, ale większość tych metod, przynajmniej te przykłady, są znacznie bardziej skomplikowane. Interesujące: http://www.codingjack.com/playground/jquick/#haseventlistlistener, ale nie używam jquick, ale lubię tę czystą prostotę. –
może używać:
$("#foo").unbind('click');
, aby upewnić się wszystkie zdarzenia kliknięcia są unbinded, a następnie podłączyć wydarzenie
Nie pomaga, jeśli korzystałeś z transmisji na żywo, aby zarejestrować wydarzenie. http://stackoverflow.com/questions/12755646/jquery-datatables-multiple-calls-to-event-handler-with-live-function –
Pytanie ma na celu sprawdzenie, czy zdarzenie istnieje na elemencie, a nie jak rozwiązać istniejące zdarzenia ... – Avi
@Avi, nadal jest dobrą odpowiedzią, ponieważ w wielu przypadkach pytanie jest zadawane z myślą o problemie: "Jak nie zarejestrować dwukrotnie programu obsługi?" – hans
poniższy kod dostarczy Ci wszystkich zdarzeń kliknij na dany selektora:
jQuery(selector).data('events').click
Można iterować nad nim za pomocą każdego lub dla przykładu. Sprawdź długość walidacji, jak:
jQuery(selector).data('events').click.length
Myślałem, że to komuś pomóż. :)
Nie działa więcej w jQuery> = 1.8. Zobacz odpowiedź Toma Gerkena na działające rozwiązanie. – jbandi
Oto jak sprawdzić, czy każde zdarzenie istnieje dla elementu
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js" type="text/javascript"></script>
<script>
$(function() {
$("#textDiv").click(function() {
//Event Handling
});
var events = $._data(document.getElementById('textDiv'), "events");
var hasEvents = (events != null);
});
</script>
</head>
<body>
<div id="textDiv">Text</div>
</body>
</html>
Myślę, że można to uprościć za pomocą: var eventBound = (events! = Null); –
To rozwiązanie działa z jQuery 1.8.0 później. Bardzo dziękuję Tonie Gerken :) –
I zakończyła się robi to
typeof ($('#mySelector').data('events').click) == "object"
Mam odpowiedział na podobne pytanie tutaj: hasHandlers() helper
Praca z jQuery> = v1.11.0
Ta praca dla mnie pokazuje obiekty i rodzaj zdarzenia, które miało miejsce.
var foo = $._data($('body').get(0), 'events');
$.each(foo, function(i,o) {
console.log(i); // guide of the event
console.log(o); // the function definition of the event handler
});
- 1. Sprawdź, czy zdarzenie już istnieje
- 2. Sprawdź, czy zdarzenie istnieje w kalendarzu
- 3. Sprawdź, czy opcja istnieje w wybranym elemencie bez JQuery?
- 4. Czy istnieje zdarzenie onDocumentChange?
- 5. Sprawdź, czy istnieje klasa
- 6. Sprawdź, czy istnieje tabela
- 7. Zdarzenie keydown na elemencie iframe
- 8. Sprawdź, czy zdarzenie nie zostało wywołane na elemencie ze szpiegiem Jasmine
- 9. Sprawdź, czy obraz istnieje php
- 10. Sprawdź, czy klucz NSUserDefaults istnieje
- 11. SparseArray, sprawdź czy klucz istnieje
- 12. logstash sprawdź, czy pole istnieje
- 13. Sprawdź, czy operator indeksowania istnieje
- 14. Sprawdź, czy istnieje serwis WWW
- 15. php: sprawdź, czy ścieżka istnieje?
- 16. Sprawdź, czy istnieje klucz rejestru
- 17. Cakephp sprawdź, czy istnieje rekord
- 18. Węzeł - Sprawdź, czy istnieje katalog
- 19. Sprawdź, czy zmienna istnieje więcej niż jeden raz w tablicy?
- 20. JavaScript: Sprawdź, czy istnieje classname
- 21. PHPExcel Sprawdź, czy istnieje arkusz
- 22. jQuery: Sprawdź, czy obraz istnieje
- 23. VBA sprawdź, czy plik istnieje
- 24. C++ Sprawdź, czy element istnieje w tablicy
- 25. Sprawdź, czy wartość istnieje w MySQL rzędu
- 26. Android - Sprawdź, czy wartość istnieje w tablicy
- 27. Sprawdź, czy wartość istnieje w dataTable?
- 28. Sprawdź, czy plik istnieje w Yii
- 29. Sprawdź, czy znak istnieje w kodowaniu
- 30. Sprawdź, czy wartość istnieje w tablicy
tak, w 1.8, wszystko to jest źle? –
@ SylylarSaveland Metoda '$ .data (element," events ")' nigdy nie była oficjalna. Ale w jQuery 1.8.0 ta metoda została pozostawiona przez '$ ._ data (element," events ")'. czytaj dalej [tutaj] (http://blog.jquery.com/2012/08/09/jquery-1-8-released/) – Anton