jQuery:如何使用if语句摆脱“未定义”错误

时间:2011-01-05 22:06:49

标签: javascript jquery function undefined

使用第三方插件时,我通常会在主application.js文件中初始化它们。

示例:

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

问题是如果页面加载没有scroll类,那么我得到:

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

因此,为了解决这个问题,我将其包装成:

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

这可以解决问题但只是看起来像是黑客。

有没有“正确”的解决方法?

5 个答案:

答案 0 :(得分:2)

如果你得到:

ScrollPane' [undefined] is not a function.

...这不是因为页面没有.scroll元素。

当未加载插件(或jQuery本身)时会发生这种错误。

如果你在几个页面上重复使用某些代码,其中一些没有该插件,请改为:

if ( $.fn.jScrollPane ){
    $('.scroll').jScrollPane();
}

答案 1 :(得分:0)

你可以使用try/catch块......

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

答案 2 :(得分:0)

呃......不jQuery不像那样工作。对$("any selector")的调用将始终为您提供一个现成的(但是空的)jQuery对象。我认为这不是你的问题。你能描述一下你的网页在做什么吗?

答案 3 :(得分:0)

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

这个错误很可能只是因为插件无法加载

答案 4 :(得分:0)

正如其他人所说,这个错误是jScroll的错误。如果是因为元素不存在,jQuery将返回一个空数组。

因为插件未加载。 jScroll是更改滚动条的插件,对吗?我有很多问题。我建议将其包装在

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

这解决了我遇到的所有问题。