Слушатель YUI установлен при запуске потерян - PullRequest
0 голосов
/ 29 сентября 2011

Я пытаюсь отслеживать клики на веб-странице, написанной на YUI2.Кажется, что события стираются, и функция обратного вызова не вызывается.

Все ссылки, которые я пытаюсь отслеживать, относятся к классу 'action-link', но ни одна из них не имеет установленного идентификатора настр.Я попытался сначала вызвать YAHOO.util.Event.addListener () с фактическим элементом, но это не сработало.Затем я попытался добавить идентификатор к каждому элементу и затем вызвать его, но это все равно не сработало.

Но, используя отладчик JS, я вижу, что идентификаторы элемента были добавлены ко всем ссылкам,Но Слушатели не настроены.В отладчике я могу вызвать 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 ); 

1 Ответ

0 голосов
/ 29 сентября 2011

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); 

Также может быть передана строка идентификатора, но это не требуется в этом случае, так как у вас уже есть список элементов 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" является идентификатором элемента на странице И, элементы, с которыми вы хотите работать в afterLoad, находятся перед этим элементом на странице или дочерними элементами этого элемента на странице. , Поскольку я не был уверен, может ли это быть частью проблемы, я переключился на onDOMReady(), что проще.

...