2012-06-18 22 views
7

Mam datepicker jQuery UI, który po kliknięciu daty powoduje wyczyszczenie mojego skrótu adresu URL do # i nie zmienia daty w polu tekstowym.Zobacz wszystkie zdarzenia w domenie dla elementu

Zakładam, że jest jakieś inne narzędzie JavaScript gdzie ma jakieś wydarzenie delegowane, które również jest wywoływane, zgłaszanie błędu i zabijanie programu obsługi jquery.

W jaki sposób mogę wykonać krok i zobaczyć wszystkie delegowane zdarzenia, które odpowiadają temu elementowi domowi.

+1

Nie mów o tym, ale możesz otwórz Narzędzia dewelopera Chrome, przejdź do zakładki Skrypty i umieść punkt przerwania w kodzie danych i przejrzyj kod JS, aby zobaczyć, co zostanie wykonane. – sachleen

Odpowiedz

10

narzędzia dev Chrome może pomóc z th jest:

  1. Punkt Chrome na stronie
  2. prawym przyciskiem myszy daty w datepicker jQuery UI i wybierz "Zbadaj element".
  3. Po prawej stronie jest akordeon z różnymi rzeczami. W dolnej części znajduje się "Event Listeners". (Obecne wersje narzędzi deweloperskich Chrome są bardzo inteligentne, w tym zapytanie do łańcucha obsługi jQuery.)
  4. Rozwiń element drzewa "Wykrywacze zdarzeń", a zobaczysz listę zahaczonych zdarzeń związanych z tym elementem, nawet jeśli przewodnik nie jest określony specjalnie dla elementu , który to element jest określony jako. (Na przykład, jeśli zrobiłeś to za pomocą przycisku upave na pytaniu, zobaczysz, że click jest podpięty zarówno dla a.vote-up-off, jak i document.) Możesz więc obrócić je, aby zobaczyć, jakie bezpośrednie i delegowane procedury obsługi odnoszą się do tego wydarzenia. element.

Oprócz tego można użyć nieliminowanej wersji jQuery i przejść przez wysyłkę zdarzenia po kliknięciu daty w datepicker.

I oczywiście, Gabe's shown, w jaki sposób można uzyskać instrukcje obsługi specyficzne dla jQuery za pośrednictwem nieudokumentowanych danych jQuery events. (To nie pokaże ci delegowanych programów obsługi (chyba że przejdziesz przez drzewo przodków) i nie pokaże ci niezwiązanych z jQuery programów obsługi, które mogą być dołączone, ale nadal jest to całkiem przydatne rzeczy.)

+0

Jesteś bogiem wśród ludzi, TJ. Dziękuję ci jak zwykle. –

+0

@AdamRackis: LOL Bez obaw, mam nadzieję, że pomaga. –

4

Z jQuery można zobaczyć wszystkie zdarzenia elementów, uzyskując dostęp do klucza danych events.

jsFiddle

Przykład:

HTML

<input type="text" id="myelement" />​ 

JS

$(function() { 


    var myelement = $('#myelement'); 
    myelement.click(function() { 

     console.log('anonymous event'); 

    }); 

    myelement.click(anotherEvent); 
    myelement.change(anotherEvent); 

    var events = myelement.data('events'); 

    console.log('Number of click events:' + events.click.length); 
    console.log('Number of change events:' + events.change.length); 

}); 

function anotherEvent(){ 
    console.log('another event'); 
} 
+0

Czy to także spowoduje przeniesienie delegowanych wydarzeń? tzn. '$ (document) .on (" click "," a ", function() {...});' jeśli '# myelement' jest kotwicą, czy pokaże ten handler? –

+0

@AdamRackis: Nie, nie będzie. Pokaże ci tylko podpięte do ciebie podpórki, które nie mogą być wywoływane w dalszej części drzewa: http://jsbin.com/ujipuz Oczywiście to nie znaczy, że nie możesz przejść przodków elementu i powtórzyć proces dla każdego z nich, który dałby pełny obraz.+1 do Gabe'a –

+0

Źle zrozumiałem, myślałem, że szukasz rozwiązania programowego, a nie narzędzia do debugowania :) – Gabe