2011-07-07 57 views
3

代表()我用於jQuery,它有一個delegate()方法。所以我們可以說我有HTML這樣的:代表原型JS

<div id="covers"> 
    <a href="#"><img ... /></a> 
    <a href="#"><img ... /></a> 
    <a href="#"><img ... /></a> 
    <a href="#"><img ... /></a> 
    <a href="#"><img ... /></a> 
    <a href="#"><img ... /></a> 
    ...lots anchors here... 
</div> 

在jQuery中,我可以綁定事件到父DIV和使用不單獨處理函數附加到新的,動態添加錨點delegate()像這樣:

$('#covers').delegate('a', 'click', function(){ 
    /// stuff I want to do 
    var clickedAnchor = $(this); 
}); 

Prototype中的等效代碼是什麼?

回答

2

Prototype的理念是,您只需添加跨瀏覽器抽象(再加上每年發佈一次,再加上污染原生原型),就可以更像純javaScript中那樣做。

因此Prototype中沒有 delegate但您可以使用Event#findElement

$('covers').observe('click', function (event) { 
    var link = event.findElement('a'); 

    if (link) { 
     // ... 
    } 
}); 

編輯:delegate在原型:http://api.prototypejs.org/dom/Event/on/

$('covers').on('click', 'a', function (event, element) { 
    // ... 
}); 
+0

所以,看起來這將是:'$( '#蓋')觀察( '點擊',功能(EVT){ \t VAR clickedAnchor = event.findElement( 'A'); \t。 if(clickedAnchor){ \t ///我想做的東西 \t} });' – artlung

+1

是的,只刪除'#'。 – katspaugh

+0

啊,對,忘了我沒有使用$$。 'on'處理程序看起來像它。 – artlung