在jQuery中无法读取`undefined`的属性`left`?

时间:2017-03-11 01:33:00

标签: javascript jquery

我正在尝试检查divviewportnot,但我收到此错误:

  

无法读取left

的属性undefined

scroll事件中,我正在检查视口中存在哪个div,如下所示:

( "#container" ).scroll(function() {
      console.log('scrlling');
      $.each( $('#container>div'), function(i, left) {
           console.log(i);
           var msid= $(left).attr('data-msid');
           console.log($(left).attr('data-msid'));
           console.log($(left['data-msid='+msid]).isOnScreen())

          })
    });

这是我的代码 https://plnkr.co/edit/Du5J120AIkNqnnpR30le?p=preview

1 个答案:

答案 0 :(得分:2)

问题在于这句话:

console.log($(left['data-msid='+msid]).isOnScreen())

而不是过滤$(left)以确保其data-msidmsid,而是在left上运行动态属性访问(由于方括号表示法) 。由于left是DOM节点,因此它没有以data-msid=开头的任何属性,因此属性访问返回undefined。因此,您的代码运行如下:

console.log($(undefined).isOnScreen())

我猜测isOnScreen()会在某个时刻检查left属性,因为传递给jQuery的唯一内容是undefined,所以不难想象会抛出错误最终在这里。

更新的代码:

$("#container").scroll(function() {
  console.log('scrolling');
  $('#container > div').each(function (i, left) {
    console.log(i);
    var msid = $(left).attr('data-msid');
    console.log(msid);
    console.log($(left).isOnScreen());
  })
});