2009-09-25 13 views

Odpowiedz

21

Odbywa się to zazwyczaj z Event#findElement:

document.observe('click', function(e, el) { 
    if (el = e.findElement('.foo')) { 
    // there's your `el` 
    // might want to stop event at this point - e.stop() 
    } 
}); 
+0

Najbardziej doskonały. dzięki! W dokumentacji, którą znalazłem wspomniałem, że dozwolona jest tylko nazwa tagu, a nie selektor CSS. Jednak patrząc na źródło Prototypu potwierdzamy, że selektor CSS jest rzeczywiście dozwolony. – mynameistechno

+0

Cóż, to nie jest dokładnie odpowiednik jQuery. To wiąże się z kliknięciem dokumentu i znajduje zdarzenie, podczas gdy wydaje mi się, że jQuery wyzwala zmiany DOM i wiąże zdarzenia z nowymi elementami. Możliwe, że jQuery ** robił coś takiego pod okładkami, ale od wersji jQuery 1.4 obsługuje zdarzenia takie jak "hover", więc wyobrażam sobie, że to * nie * robienie czegoś takiego pod okładkami, nawet jeśli raz zrobił. – cgp

+0

@altCognito, nie jest to prawie jak jQuery działa pod maską dla wiązania na żywo od wprowadzenia 'live'. jQuery może wiązać programy obsługi do 'document' dla zdarzeń, które nie rozmnażają się natywnie, ponieważ jQuery ręcznie tworzy i propaguje takie zdarzenia. – jangosteve

13

Prawidłowa odpowiedź na pytanie jest tutaj: http://gurde.com/2011/08/jquery-live-in-prototype/

Odpowiednikiem jQuery .live() w Prototype jest metoda Event.on():

var handler = document.on(
    'click', 
    'div[id^="post-"] .attached-post-thumbnail', 
    function(event, element) { 
     console.log(this); 
     console.log(element); 
    }.bind(this) 
); 

handler.stop(); 
handler.start(); 

W ramach oddzwonienia to słowo kluczowe będzie zawsze odnosić się do pierwotnego elementu (w tym przypadku dokumentu) .

+0

Prawidłowe miejsce na zapytanie/narzekanie to meta. Prawdopodobnie usunięto, ponieważ była to odpowiedź typu "just-a-link", ale nie było powodu. –

+1

zobacz moją edycję i http://stackoverflow.com/questions/how-to-answer –

+0

Wierzę, że połączony przykład jest błędny. Nie ma 'document.on (...)', zamiast tego musiałbyś użyć 'Event.on (document, ...)' w ten sam sposób. – clockworkgeek