我有一个HTML标记块,对于一个课程看起来像这样。这是我的客户使用
预定义的CMS<ul class="box-3036">
<li aria-selected="true">
<a href="#" id="ui-id-5">Dentistry</a>
</li>
</ul>
我有很多课程,这是另一个HTML课程的另一个例子。
<ul class="box-3032">
<li aria-selected="true">
<a href="#" id="ui-id-7">Pharmacy</a>
</li>
</ul>
我正在尝试为所有这些课程编写jQuery代码。从HTML块,这是唯一的信息
<ul>
类<a>
id <a>
点击会打开两个课程网址这是我现在拥有的jQuery代码。我面临的问题是URL变量给了我 undefined 值
box = [
".box-3036",
".box-3032"
];
uiid = [
"a#ui-id-5",
"a#ui-id-7"
];
urlfirst = [
"http://www.yahoo.com",
"http://www.gmail.com"
];
urlsecond = [
"http://www.google.com",
"http://www.7senarai.com "
];
for (var i = 0; i < box.length; i++) {
$(box[i] + " " + uiid[i]).click(function() {
var pid = $(this).parent().attr("aria-selected");
if(pid == "true") {
//window.open(urlfirst[i], '_blank');
//window.location.href = urlsecond[i];
alert(urlfirst[i]);
alert(urlsecond[i]);
}
});
}
这是我的jsfiddle
答案 0 :(得分:1)
我建议您使用forEach而不是for循环,以便i
为每个绑定设置范围。
box.forEach(function(aBox, i){
$(aBox + " " + uiid[i]).click(function() {
var pid = $(this).parent().attr("aria-selected");
if (pid == "true") {
//window.open(urlfirst[i], '_blank');
//window.location.href = urlsecond[i];
console.log(i);
console.log(urlfirst[i]);
console.log(urlsecond[i]);
}
});
});
答案 1 :(得分:1)
在循环内容周围使用闭包来保留i
的值,如下所示:
for (var i = 0; i < box.length; i++) {
(function( i ) {
$(box[i] + " " + uiid[i]).click(function() {
var pid = $(this).parent().attr("aria-selected");
if(pid == "true") {
//window.open(urlfirst[i], '_blank');
//window.location.href = urlsecond[i];
alert(urlfirst[i]);
alert(urlsecond[i]);
}
});
})( i );
}
答案 2 :(得分:1)
问题是for循环范围中的var i
高于你传递给click的函数,所以你在循环结束后获得i
的值{{1} } 在这种情况下。您希望2
的范围适用于您的点击功能
i