2010-05-30 159 views
0

我正在使用几个包含MenuFader(http://css-tricks.com/examples/MenuFader/),twitter feed和timestamp的jQuery脚本。另外我有一些Mootools脚本,包括Barackslideshow(http://devthought.com/wp-content/moogets/BarackSlideshow/demo.html)。最后,我有一个带有从twitter主页获取的工具提示的滚动报价器。我最初与Jquery MenuFader和Mootools BarackSlideshow发生冲突,但使用jQuery.noconflict()轻松解决了这个问题。并用jQuery替换所有对应的$。多个jQuery.noConflict()实例

不幸的是,在我从Twitter上添加滚动代码后,Mootools BarackSlideshow和Jquery MenuFader不再有效。

我试图实现jQuery.noconflict();然后$ .noconflict();那么var j = jQuery.noconflict();并像我之前做的那样替换$,但我无法让脚本很好地播放。

任何帮助非常感谢...我一直在这一整天工作。我很新的JavaScript,但已设法解决大多数问题与一点持久性。请看看下面的脚本:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.0/jquery.min.js"  type="text/javascript"></script> 
<script src="http://a2.twimg.com/a/1274914417/javascripts/fronts.js" type="text/javascript"></script> 

<script type="text/javascript"> 
//<![CDATA[ 

     $(function() { 

    setTimeout(function() { $(".twtr-widget").append($("<div></div>").attr("class", "twtr-fade")); }, 0); 

    (function() { 
    var tabIndex = $("[tabindex]:last").attr("tabIndex"); 
    var setTabIndex = function() { 
     $(this).attr("tabindex", ++tabIndex); 
    } 
    $(".footer-nav a").each(setTabIndex); 
    $(".language-select a").each(setTabIndex); 
    })(); 

    $("#signup_submit").scribe({ 
    event_name: "signup_submit_click", 
    experiment: "ab_signup_button", 
    bucket: "sign_up" 
    }, "www_ab_tests"); 

    $('#signin_menu').isSigninMenu(); 

     new FrontPage().init(); 

     }); 

//]]> 

回答

1

noConflict根本,只有关于修改名称的jQuery库正在使用。

这是一个试图与其他框架发挥更好的作用,也可能想要使用名称$,但这就是它的全部。它不能解决其他任何与其他框架的普遍冲突。例如,当一个框架克隆,更改或删除一个元素与jQuery的内部ID标记,怪异的undebuggable错误可能确保。它仍然是一个真的坏主意在单个页面上使用多个框架,当它们与jQuery一样广泛和侵入时。 (特别是jQuery 1.3,它对所触及的元素超混杂)。

类似地,对相同元素进行操作的两个高级插件很可能会产生不需要的行为交互。假设一个插件将一个行为绑定到一个元素,但是另一个插件会删除该元素以将其替换为渐进式增强版本。或者一个插件尝试读取不再具有可见宽度的元素的offsetWidth,因为另一个插件在其父级上调用hide()

脚本和插件可能假装是完全封装的行为,您可以在不理解它们如何工作的情况下四处乱扔,但实际上并非如此。如果你将两个脚本绑定到相同的元素上(这些脚本没有被刻意设计成一起工作),它们可能会干扰或失败。尽量保持不同插件会影响的元素,以减少这种潜力。