2011-09-29 66 views
0

我試圖監視在YUI2中編寫的網頁上的點擊。 事件似乎被抹去,回調函數沒有被調用。在啓動時設置的YUI監聽器丟失

,我要監控的環節都是一流的「動作鏈接」,但沒有在網頁上有一個id集。我試着用實際的元素先調用YAHOO.util.Event.addListener(),但那不起作用。接下來,我嘗試向每個元素添加一個id,然後調用它,但仍然無效。

但是用JS調試器,我看到元素的ID已被添加到所有的鏈接。但聽衆沒有設置。在調試器中,我可以在各種鏈接上調用YAHOO.util.Event.getListeners(),並查看它們全部爲空。然而,在調試器中,我可以手動調用YAHOO.util.Event.addListener(elementIDString,「click」,fnCallback),然後單擊鏈接導致回調被輸入。

function fnCallback(e) { 
    alert("click event: " + e.currentTarget.title); 
} 

function afterLoad() 
{ 
    var elements = YAHOO.util.Dom.getElementsByClassName('action-link'); 
    for (var element in elements) 
    { 
    if(elements[element].id=="") elements[element].id = "el_" + element; 
     YAHOO.util.Event.addListener(elements1[element].id, "click", fnCallback); 
    } 

} 
YAHOO.util.Event.onContentReady("Share", afterLoad, null, false); 

回答

0

YAHOO.util.Event.addListener優選以DOM元素作爲它的第一個參數是這樣的:

function afterLoad() 
{ 
    var elements = YAHOO.util.Dom.getElementsByClassName('action-link'); 
    for (var i = 0; i < elements.length; i++) 
    { 
     YAHOO.util.Event.addListener(elements[i], "click", fnCallback); 
    } 

} 
YAHOO.util.Event.onDOMReady(afterLoad); 

它也可以通過一個ID字符串,但既然你已經有了一個名單未在這種情況下,需要的DOM元素。

此外,你不應該與for x in yy作爲迭代的陣列可以方便地包括非數字索引諸如自定義屬性。

或者,你可以把它寫使用匿名函數是這樣的:

YAHOO.util.Event.onDOMReady(function() { 
    var elements = YAHOO.util.Dom.getElementsByClassName('action-link'); 
    for (var i = 0; i < elements.length; i++) { 
     YAHOO.util.Event.addListener(elements[i], "click", fnCallback); 
    } 
}); 

僅供參考,YAHOO.util.Event.onContentReady("Share", afterLoad)將只有"Share"工作是在頁面的項目的ID和,要在經營上的項目afterLoad在頁面中的該項目之前或該頁面中該項目的子項目之前。由於我不確定這是否也可能是問題的一部分,因此我切換到了onDOMReady()這更簡單。