Ошибка 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.
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>Некоторые общие идеи дизайна / компоновки кода, которые применимы здесь:
- Избегайте глобалов, когда это возможно.
- не объявляйте что-то в одной области, а затем попытайтесь использовать его в другой области (не будет работать, если global, так что смотрите Правило № 1), и если global может иметь проблемы со временем тоже.
- Fetch селектор дает результаты только тогда, когда это необходимо в функции, где они потребляются. Существует очень, очень редко причина кэшировать что-то подобное за пределами времени существования функции.
- Если вы собираетесь ссылаться на один и тот же объект jQuery более одного раза в функции, то вы можете сохранить его в локальной переменной на время действия функции (до тех пор, пока его результаты не будут изменены в функции).
Я надеюсь, вы понимаете,что один оператор var не применяется ко всем переменным. Вы объявляете глобальные переменные.
Comments