我想在Mootools類中定義一個點擊處理程序。我的處理程序假定打開一個鏈接塊,每個鏈接都應該配備自己的點擊處理程序,這應該觸發鏈接特定的操作。我的意思是讓我們假設我有以下的HTML代碼:範圍內的'這'內mootools類
<div id="wrapper">
<a href="#" id="header">open options</a>
<div class="optionsBlock" style="display:none">
<a href="#">1</a>
<a href="#">2</a>
<a href="#">3</a>
</div>
</div>
然後我想在MooTools的像這樣定義一個類:
var myHandler = new Class({
Implements : [Events],
initialize : function(element){
this.element = document.id(element);
this.elements = this.element.getChildren('a');
this.elements.addEvents('click', function(ev){
ev.preventDefault();
//'this' as a reference to the current element in the array, which is being clicked, correct?
this.getSibling('div.optionsBlock').setStyle('display', 'block');
var parentLink = this;
this.getSibling('div.optionsBlock').getChildren('a').addEvent('click', function(e){
e.preventDefault();
//should append the text of currently clicked link into the parent link
parentLink.appendText(this.get('text'))
});
});
}
});
new myHandler('wrapper');
這只是我怎麼能一個例證想象中的代碼應該是這樣的(我敢肯定,這個代碼是一點都不好),但我真的需要就以下一些幫助:
由於添加新的事件constatly改變了「這個」範圍,ho我應該保持對類實例和被點擊元素的引用嗎?
我應該如何修改該類以便不在initialize方法中包含整個代碼?我試圖爲每個事件處理程序創建單獨的方法,但是因此我對'this'的範圍感到困惑,並且綁定並試圖將所有這些結合在一起真的讓我惱火,但是我想要掌握這些知識。
如何在類中添加嵌套事件處理程序時跟蹤「this」的範圍?我老實地搜索了一個答案,但無濟於事。
謝謝!
是的,謝謝你的鏈接。在發佈我的問題之前,我讀了第一篇。第三個更有用,我必須承認。至於保存參考資料,正如你在第一個答案中提出的那樣,是的,我這樣做了。它工作得很好,而我不需要訪問事件本身來停止其默認操作。無論如何,我會嘗試更多的選擇。謝謝 – proglammer 2012-08-14 06:28:54
實際上,我得到了一件事:如果我能夠'event.preventDefault()'(在addEvent()方法中訪問事件本身),那麼很明顯,我可以訪問該事件通過'event.target',也就是這個在一個普通的事件聲明中(在一個類之外)。這是主要問題:我不知道如何訪問被點擊的元素。現在我知道了。謝謝! – proglammer 2012-08-14 06:39:43