我正在尝试将生成的链接标记列表作为一个函数,这就是我这样做的方式。
for (i = 0; i < friendsXML.length; i++) {
friendListInDiv = document.createElement("p");
var link = document.createElement("a");
link.onclick = function() {
openChat(friendsXML[i].textContent)
};
var friendText = document
.createTextNode(friendsXML[i].textContent + ":"
+ statusXML[i].textContent);
link.appendChild(friendText);
friendListInDiv.appendChild(link);
friendDiv.appendChild(friendListInDiv);
}
目前openChat(name)函数仅调用警报来测试其值
function openChat(name){
alert(name);
}
现在的问题是,当我进入我的网页并单击其中一个生成的链接时,它始终会提醒第一个名称(每个链接都会提醒相同的名称,第一个名称)。所以我的问题是如何修复它,我会提醒每个链接的正确名称?
如果需要,这是完整代码的pastebin http://pastebin.com/8ggE7SHs
答案 0 :(得分:1)
将其包装在函数闭包中:
for (i = 0; i < friendsXML.length; i++) {
(function(i) {
friendListInDiv = document.createElement("p");
var link = document.createElement("a");
link.onclick = function() {
openChat(friendsXML[i].textContent)
};
var friendText = document
.createTextNode(friendsXML[i].textContent + ":"
+ statusXML[i].textContent);
link.appendChild(friendText);
friendListInDiv.appendChild(link);
friendDiv.appendChild(friendListInDiv);
}(i))
}
你的变量被提升到外部范围,Javascript只有函数级别范围。