在if语句中显示未定义的数组

时间:2016-12-06 23:41:22

标签: jquery

我有一个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

3 个答案:

答案 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 );
}

DEMO

答案 2 :(得分:1)

问题是for循环范围中的var i高于你传递给click的函数,所以你在循环结束后获得i的值{{1} } 在这种情况下。您希望2的范围适用于您的点击功能

i