jQuery: как я могу обойти использование оператора if, чтобы избавиться от «неопределенных» ошибок - PullRequest
2 голосов
/ 06 января 2011

При использовании сторонних плагинов я обычно инициализирую их в своем основном файле application.js.

Пример:

$('.scroll').jScrollPane();

Проблема в том, что страница загружается неесть класс scroll, тогда я получаю:

TypeError: Result of expression '$('.scroll').jScrollPane' [undefined] is not a function.

Итак, чтобы обойти это, я обертываю это:

if ($(".scroll").length){
    $('.scroll').jScrollPane();
}

Это решает проблему, но выглядит как хак.

Есть ли "правильный" способ решить эту проблему?

Ответы [ 5 ]

2 голосов
/ 06 января 2011

Если вы получаете:

ScrollPane' [undefined] is not a function.

... этого не произойдет, потому что на странице нет элемента .scroll.

Такая ошибка возникаеткогда плагин (или сам jQuery) не загружен.

Если вы повторно используете какой-то код на нескольких страницах, некоторые из которых не имеют этого плагина, сделайте это вместо:

if ( $.fn.jScrollPane ){
    $('.scroll').jScrollPane();
}
0 голосов
/ 06 января 2011

Как сказали несколько других, эта ошибка - ошибка jScroll.Если это потому, что элемент не существует, jQuery вернет пустой массив.

Это потому, что плагин не загружен.jScroll - плагин для изменения полос прокрутки, верно?У меня были многочисленные проблемы с этим.Я предлагаю обернуть его в

$(window).load(function(){
    //Call it here
})

. Это исправило все проблемы, которые у меня были с ним.

0 голосов
/ 06 января 2011
if ($('.scroll').jScrollPane()){
    $('.scroll').jScrollPane();
}

эта ошибка вероятна только потому, что загрузка аддона не удалась

0 голосов
/ 06 января 2011

Э-э-э ... нет;JQuery не работает так.Вызов $("any selector") всегда вернет вам готовый (но пустой) объект jQuery.Я не думаю, что это действительно ваша проблема.Не могли бы вы подробнее рассказать о том, что делает ваша страница?

0 голосов
/ 06 января 2011

вы можете использовать пробовать / ловить блоки ...

try
  {
    $('.scroll').jScrollPane();
  }
catch(err)
  {
  //Handle or ignore errors here
  }
...