2013-10-29 29 views
2

有沒有一種方法,使用'invoke','observe'和'click'作爲參數,來訪問'正在調用'的項目正在迭代?Prototype.js,調用invoke觀察點擊,嘗試獲取單擊的元素。有關範圍的困惑

我這樣做:

1.

$$('.item').invoke('observe', 'click', function(event) { 
    // I want to access the .item that was clicked in here 
}); 

我可以做

2.

$$('.item').first().observe('click', function(node) { 
    // I can access the .item right here with 'node' 
}) 

我甚至可以做

3.

$$(".item").each(function(node) { 
     node.observe('click', function(event) { 
     // use 'node' here for the .item clicked 
    }); 

但我想知道是否有辦法做#1(速記方式),同時仍然訪問被點擊的元素。

有沒有辦法做到這一點?

回答

3

找到我的答案了。

我在找的是Event.element(event),它返回調用該事件的元素。

我還應該注意到,爲了使用上event.element原型方法,你需要用它在原型選擇這樣的:

var element = $(Event.element(event)) 
+0

嘗試使用'this'瓶蓋內 - 它應該是擴展元素,該事件發生在 - 你也可以使用'event.findElement()'這將返回擴展元素 –

+0

不,實際上,invoke語句中的'this'指向被觸發的'event',而不是它被觸發的'element',這不是我所需要的。 –

+0

+1,因爲這仍然是一個保留的關鍵字,JavaScript將根據詞彙範圍解釋爲「this」。 –

0

退房Event.on到位Event.observe的:

$$('.item').invoke('on', 'click', '.item', function(event, el) { 
    // el is the '.item' element 
}); 

或者,你可以做這樣的事情:

<div id="item-container"> 
    <div class="item">Item 1</div> 
    <div class="item">Item 2</div> 
    <div class="item">Item 3</div> 
</div> 

$('item-container').on('click', '.item', function(event, el) { 
    // el is the '.item' element 
    console.log(el.innerHTML); 
}); 

這很好,因爲你只在#item-container上設置了一個事件處理函數,它允許你添加/刪除.item子項,而不必擔心註冊/註銷事件處理程序。太好了!

+0

非常感謝!這也適用於我的問題。 –

0

我funcion好:

*Event.observe(document, 'click', respondToClick); 
function respondToClick(e) {      
    var el = e.element(); 
    var del = el.hasClassName('classIdDiv'); 
    var id = el.identify(); 
    if(del == true){ 
     Function_personal(id); 
     return; 
    } 
}*