2013-11-23 2 views
0

В IE8, мой скрипт меню, похоже, не идет хорошо. Но после долгих поисков я не могу понять, почему он бросает ошибки, как:Невозможно получить значение свойства «звонок»: объект имеет значение null или undefined 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

На самом деле, многие из них не доступны в IE8, 'classList' работает только в IE11 и т. д. – adeneo

ответ

3

Array.forEach() не поддерживается в IE8.

Поскольку вы отметили вопрос с помощью 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

+0

Спасибо. Это прекрасно работает. Мне нужно еще кое-что прочитать, я думаю, что мне есть чему поучиться. Большое спасибо! – Doidgey

Смежные вопросы

 Смежные вопросы