Динамически добавлять ссылки с различными событиями клика - PullRequest
0 голосов
/ 17 декабря 2010

У меня есть расширение, которое динамически добавляет несколько ссылок на страницу, и все ссылки должны запускать одну и ту же функцию, но с разными значениями параметров.

Проблема, которую я получил, состоит в том, что событие click отправляет одну и ту же переменную для всех моих ссылок (URL-адрес последнего элемента отправляется для каждой ссылки).Я полагаю, что событие щелчка перезаписывается каждый раз.Есть ли какое-то решение для этого?

for(var i=1;i < splits.length;i++){               //goes through all xml items.
    var link_dom = document.createElement('a');   //creates a link dom.
    var url = parseXMLItem(splits[i],"url");      //fetches url from xml item i.
    var text_dom = document.createTextNode("test"); //creates a text dom.

    link_dom.onclick=function (evt) {             //click event for this specific link.
        chrome.extension.sendRequest({'action' : 'showSite','URL' : url}, mysub);
    }

    link_dom.appendChild(text_dom);               //adds text to link.
    body_dom.appendChild(link_dom);               //adds the link to the website.
}

1 Ответ

1 голос
/ 17 декабря 2010

Закрытие ссылается на переменную во внешнем контексте, которая присваивается при каждой итерации цикла.Попробуйте что-то вроде этого:

for(var i=1;i < splits.length;i++){               //goes through all xml items.
    var link_dom = document.createElement('a');   //creates a link dom.
    var url = parseXMLItem(splits[i],"url");      //fetches url from xml item i.
    var text_dom = document.createTextNode("test"); //creates a text dom.

    link_dom.onclick=(function(url) {
        return function (evt) {             //click event for this specific link.
            chrome.extension.sendRequest({'action' : 'showSite','URL' : url}, mysub);
        }
    })(url);

    link_dom.appendChild(text_dom);               //adds text to link.
    body_dom.appendChild(link_dom);               //adds the link to the website.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...