使用Labjs我得到一个“$未定义”错误,但js仍然有效,不知道为什么:(

时间:2012-05-26 10:48:53

标签: javascript jquery labjs

我正在使用LABjs来获得一些并行的js加载优点。

但是,由于一些奇怪的原因,我在调试控制台中收到“$ is not defined”的错误。

我的代码如下:

<script>
$LAB.script("http://use.typekit.com/blah.js").script("/assets/js/libs/jquery-1.5.1.min.js").script("/assets/js/libs/basic-jquery-slider.min.js").wait().script("/assets/js/libs/modernizr-1.7.min.js").script("/assets/js/libs/jquery.watermarkinput.js").wait().script("/assets/js/libs/jquery-ui-1.8.14.custom.min.js").wait().script("/assets/js/effects.js").wait(function(){});

在我的effects.js中我有。

try{Typekit.load();}catch(e){}
$('#banner').bjqs({
'width' : 980,
'height' : 212,
'showMarkers' : false,
'showControls' : false,
'centerMarkers' : false
});

一切正常,但我得到了上述错误。我不明白为什么,jquery对象应该在那里(并且必须像所有东西一样),为什么会出错?

有什么想法吗?我确定我正在使用labjs,但我认为这个错误令IE7感到不安:(

我应该在后面的代码中添加一个$(document).ready?但这似乎让labjs感到不安。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

试试这个:

<script>
$LAB
.script("http://use.typekit.com/blah.js")
.script("/assets/js/libs/jquery-1.5.1.min.js").wait() // <---- ADD THIS .wait()
.script("/assets/js/libs/basic-jquery-slider.min.js").wait()
.script("/assets/js/libs/modernizr-1.7.min.js")
.script("/assets/js/libs/jquery.watermarkinput.js").wait()
.script("/assets/js/libs/jquery-ui-1.8.14.custom.min.js").wait()
.script("/assets/js/effects.js").wait(function(){});
</script>

其他一些说明:

  1. 删除最后的空/ noop .wait()函数,不再需要它。
  2. modernizr不应该被LABjs加载......你应该按照IIRC说它应该在你文档顶部的普通<script>标签中的文档加载它。
  3. 我的猜测是你在这个链条中的一些.wait()是不必要的。例如,我的猜测是在“jquery-slider”和“jquery-watermark”script()调用之后不需要它们,因为我敢打赌它们不依赖于彼此,因此可以在任何ASAP顺序中运行彼此之间,只要他们确保在jQuery完成后运行(这就是为什么我在代码段中添加评论以添加.wait()电话!

答案 1 :(得分:0)

我刚刚意识到隐藏在页脚中的include是对我的effects.js文件的另一个调用。但这是在普通的脚本标签中。这可以解释为什么它运行时出现错误然后工作,因为它被调用两次,一次在labjs内部,一次没有。真是个白痴:(感谢大家尝试!对不起!