目前我有一個循環創建多個HTML對象的函數。每次創建一個對象時,我都希望爲該對象添加一個onClick
函數偵聽器,以便在單擊每個對象時觸發一個函數。通過JavaScript添加事件監聽器時遇到問題
這樣做的最好方法是什麼?
這裏是它創建我的對象代碼:
RenderMultipleChoice:function()
{
this.c = paper.rect(this.x, this.y, this.shapeWidth, this.shapeHeight);
}
目前我有一個循環創建多個HTML對象的函數。每次創建一個對象時,我都希望爲該對象添加一個onClick
函數偵聽器,以便在單擊每個對象時觸發一個函數。通過JavaScript添加事件監聽器時遇到問題
這樣做的最好方法是什麼?
這裏是它創建我的對象代碼:
RenderMultipleChoice:function()
{
this.c = paper.rect(this.x, this.y, this.shapeWidth, this.shapeHeight);
}
您可能會考慮使用event delegation而不是爲每個創建的元素添加點擊偵聽器。然後,您只有一個父級事件偵聽器,並查看該事件從哪個元素冒泡。它也將神奇地爲將來創造的元素工作。
jQuery有兩種方法來處理這個問題爲您:
實施例:
$("#parent").delegate(".child", "click", RenderMultipleChoice);
現場是一個真棒功能,但你應該知道它的缺點:
Performance difference between jQuery's .live('click', fn) and .click(fn)
您可以使用addEventListener或attachEvent。假設paper.rect返回一個DOM元素:
if(this.c.addEventListener)
{
this.c.addEventListener("click", listenerFunction, false);
}
else
{
this.c.attachEvent("onclick", listenerFunction);
}
有些庫需要將它抽象出來。
其實你需要同時使用,如果你要擁有某種跨瀏覽器兼容的。 – azatoth 2010-06-07 14:34:23
非常感謝。 – 2010-06-07 14:41:19
我到現在還沒有意識到事件代表團,非常感謝你提出這個建議。看起來像我正在做的事情。 – 2010-06-08 08:21:13