在script.aculo.us中使用jQuery noConflict()

时间:2011-12-15 18:14:22

标签: javascript jquery wordpress debugging

我的网站使用的是包含http://healcode.com JavaScript库的“小部件”(来自script.aculo.us)。问题是我正在构建的网站是在WordPress上,因此存在经典的jQueryscript.aculo.us冲突。

我知道我需要在.noConflict()模式下运行jQuery,但我必须弄错语法。当我按如下方式将$分配给jQuery .noConflict时,它仍会关闭script.aculo.us函数:

var $ = jQuery.noConflict();

$(document).ready(function () {

    //#nav-main dropdown effects

    $('#nav-main ul li').hoverIntent(function () {
        $(this).find('.dropdown').stop(true,true).slideDown('900'); },
            function(){
                $(this).find('.dropdown').stop(true,true).slideUp('500');
        });
}); // end document.ready

我知道我在$模式下将.noConflict()分配给jQuery,我假设script.aculo.us(通过主体中的小部件加载,因此在jQuery之后)是试图将$重新分配回script.aculo.us。

如何以稍后加载的script.aculo.us库不会冲突的方式将$分配给jQuery?我已经尝试了以下但没有任何成功(以下代码导致script.aculo.us工作,但jQuery失败):

jQuery(document).ready(function () {

    //#nav-main dropdown effects

    jQuery('#nav-main ul li').hoverIntent(function () {
        jQuery(this).find('.dropdown').stop(true,true).slideDown('900'); },
            function(){
                jQuery(this).find('.dropdown').stop(true,true).slideUp('500');
        });
}); // end document.ready

修改

上述代码的调试控制台输出是:

Uncaught TypeError: Object #<HTMLDocument> has no method 'ready' (anonymous function)所以document.ready失败了,因为它被分配给了jQuery,它在某种程度上没有正确加载......

编辑2

下面发布的2个(在本次更新时)答案中的任何一个都没有解决我正在努力解决的问题。也许它们在技术上是正确的,但它们并没有解决我的问题。

4 个答案:

答案 0 :(得分:2)

这对我有用,所以我可以让jQuery和script.aculo.us / Prototype一起工作。对于这个救星来说,归功于codeimpossible

而不是:

jQuery(document).ready(function () {

    // Code to run on DOM ready

}); // End document.ready

试试这个:

( function($) {

    // Code to run on DOM ready

} )( jQuery ); // End document.ready

答案 1 :(得分:1)

我发现解决方案非常令人惊讶!

首先,使用$j = jQuery.noConflict();模式无效。

其次,在头部调用jQuery.noConflict();不起作用。

完成工作的方法是:http://codeimpossible.com/2010/01/13/solving-document-ready-is-not-a-function-and-other-problems/

奇怪的是,Coda Slider 2.0 plugin并不会自动执行noConflict所以事实证明 IN ADDITION 对于上面列出的问题,我需要将该插件包装在{{1也是。喊出博客文章的作者,不知道为什么其他.noConflict();调用方法不起作用,但我很高兴我找到了帖子。

答案 2 :(得分:0)

jQuery权限分配回$无效。

将jQuery分配给另一个变量:

var j$ = jQuery.noConflict();

或者不要将它分配给任何东西:

jQuery.noConflict();

答案 3 :(得分:0)

试试这个:

<script src="url to jquery"></script>
<script type="javascript">jQuery.noConflict();</script>
<script src="url to scriptaculous"></script>