我在页面中有很少的链接,我想为每个链接添加一个功能。我已经完成了循环。
现在,我得到了一个对象数组。我想将对象值传递给我分配给链接的函数。所以我想将链接数组与我的对象数组匹配。
HTML
<a href="#">link1</a>
<a href="#">link2</a>
<a href="#">link3</a>
JS
var myArray = [
obj1 = {property: "value1"},
obj2 = {property: "value2"},
obj3 = {property: "value3"}
];
var pageLinks = document.getElementsByTagName("a");
for (i = 0, len = pageLinks.length; i < len; i++){
pageLinks[i].attachEvent("onclick", function(i){
alert(myArray[i].property);
}, false);
}
我试过这样做,但我想我错过了什么。如果我在i
中使用数组索引而不是alert()
,则可以正常工作。但是没有匹配。我只坚持一个obj。如何将loop
的{{1}}传递给网页链接,还传递给我的功能。
答案 0 :(得分:1)
尝试添加闭包,为每次迭代存储i
的值:
var myArray = [
{property: "value1"},
{property: "value2"},
{property: "value3"}
];
var pageLinks = document.getElementsByTagName("a");
for (i = 0, len = pageLinks.length; i < len; i++){
// This closure allows the value of "i" to be used
// when the event handler is fired.
(function(i){
pageLinks[i].addEventListener("click", function(){
alert(myArray[i].property);
}, false);
})(i);
}
答案 1 :(得分:0)
您可以使用bind
像这样:
for (i = 0, len = pageLinks.length; i < len; i++){
pageLinks[i].addEventListener("click", function(ind){
alert(myArray[ind].property);
}.bind(this,i), false);
}
此问题与范围和闭包有关。
Function.bind:Bind
第一个参数是this
的范围,当按指定的顺序调用函数时,所有其他参数都被传入。