Ошибка IE8 JS: объект не поддерживает это свойство или метод



Я использую следующие JS, которые я нашел в интернете, чтобы реализовать адаптивную навигацию. В источнике нет ничего о наличии каких-либо ошибок в IE8, однако я делаю некоторые тесты совместимости в BrowserStack (Win7+IE8) и получаю ошибку "объект не поддерживает это свойство или метод". Вот весь сценарий:



<script>
$(function() {
var pull = $('#menu');
menu = $('nav ul');
menuHeight = menu.height();

$(pull).on('click', function(e) {
e.preventDefault();
menu.slideToggle();
});
});

$(window).resize(function(){
var w = $(window).width();
if(w > 320 && menu.is(':hidden')) {
menu.removeAttr('style');
}
});
</script>


И это строка, которая IE8 не нравится (особенно символ 6):



if(w > 320 && menu.is(':hidden')) { 


Любая помощь в решении этой проблемы была бы потрясающей, я все еще не лучший в этом JS.

521   2  

2 ответов:

Просто перестаньте хранить объекты jQuery в глобалах вообще. Это не стоит много, чтобы просто создать их по требованию, и вы не попадаете в эту проблему жизни/области, которая у вас была:

<script>
$(function() {  
    $('#menu').on('click', function(e) {  
        e.preventDefault();  
        $('nav ul').slideToggle();  
    });  
});  

$(window).resize(function(){  
    var menu = $('nav ul'); 
    if($(window).width() > 320 && menu.is(':hidden')) {  
        menu.removeAttr('style');  
    }  
});
</script>

Некоторые общие идеи дизайна / компоновки кода, которые применимы здесь:

  1. Избегайте глобалов, когда это возможно.
  2. не объявляйте что-то в одной области, а затем попытайтесь использовать его в другой области (не будет работать, если global, так что смотрите Правило № 1), и если global может иметь проблемы со временем тоже.
  3. Fetch селектор дает результаты только тогда, когда это необходимо в функции, где они потребляются. Существует очень, очень редко причина кэшировать что-то подобное за пределами времени существования функции.
  4. Если вы собираетесь ссылаться на один и тот же объект jQuery более одного раза в функции, то вы можете сохранить его в локальной переменной на время действия функции (до тех пор, пока его результаты не будут изменены в функции).

Я надеюсь, вы понимаете,что один оператор var не применяется ко всем переменным. Вы объявляете глобальные переменные.

Comments

    Ничего не найдено.