YUI Listener在启动时设置丢失

时间:2011-09-29 01:15:58

标签: events yui listener

我正在尝试监控在YUI2中编写的网页上的点击次数。 这些事件似乎正在消失,回调函数也没有被调用。

我尝试监控的链接都是类'action-link',但没有一个在页面上设置了id。我尝试首先使用实际元素调用YAHOO.util.Event.addListener(),但这不起作用。接下来,我尝试为每个元素添加一个id,然后调用它,但是仍然没有用。

但是使用JS调试器,我看到元素id已被添加到所有链接中。但听众没有设定。在调试器中,我可以在各种链接上调用YAHOO.util.Event.getListeners(),看看它们都是null。然而,在调试器中,我可以手动调用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 ); 

1 个答案:

答案 0 :(得分: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()