2010-05-30 79 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()

腳本和插件可能假裝是完全封裝的行爲,您可以在不理解它們如何工作的情況下四處亂扔,但實際上並非如此。如果你將兩個腳本綁定到相同的元素上(這些腳本沒有被刻意設計成一起工作),它們可能會干擾或失敗。儘量保持不同插件會影響的元素,以減少這種潛力。