2011-09-29 60 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()这更简单。