无法获取属性'call'的值:object为null或未定义IE8

时间:2013-11-23 16:56:46

标签: javascript jquery

在IE8中,我的菜单脚本似乎没有顺利进行。但经过多次搜索,我无法弄清楚它为什么会抛出错误:

SCRIPT5007: Unable to get value of the property 'call': object is null or undefined 
site.js, line 5 character 5

我的剧本是:

var anchor = document.querySelectorAll('button');

    [].forEach.call(anchor, function(anchor){
      var open = false;
      anchor.onclick = function(event){
        event.preventDefault();
        if(!open){
          this.classList.add('close');
          open = true;
        }
        else{
          this.classList.remove('close');
          open = false;
        }
      };
    });

此脚本处理我的移动导航,但由于我还在学习,我无法解决这个问题。谁能帮助我指出正确的方向?

1 个答案:

答案 0 :(得分:3)

IE8不支持

Array.forEach()

由于您已使用jQuery标记了问题,请使用$.each()来迭代数组。

使用jQuery可以写成

$('button').click(function(){
    $(this).toggleClass('close')
})

vanila脚本解决方案可以

var anchor = document.querySelectorAll('button');

function handler(e) {
    if (/\bclose\b/.test(this.className)) {
        this.className = this.className.replace(/\bclose\b/, '');
    } else {
        this.className += ' close';
    }
}

for (var i = 0; i < anchor.length; i++) {
    if (window.addEventListener) {
        anchor[i].addEventListener('click', handler, false);
    } else {
        anchor[i].attachEvent('onclick', handler);
    }
}

演示:Fiddle