私は JQuery ツールのタブ機能を使用していますが、同時に JQuery UI も使用しています。
両方の JS ライブラリを含めると、タブ付きの Jquery ツールが機能しません。
この競合を修正するにはどうすればよいですか? どんな助けでも大歓迎です。
前もって感謝します。
私は JQuery ツールのタブ機能を使用していますが、同時に JQuery UI も使用しています。
両方の JS ライブラリを含めると、タブ付きの Jquery ツールが機能しません。
この競合を修正するにはどうすればよいですか? どんな助けでも大歓迎です。
前もって感謝します。
タブを含まないカスタム jQuery-ui ビルドを取得することはできますが、後で混乱を招く可能性があります。より良いアプローチは、私見ですが、jQuery-tools を編集して次のtabs.js
行を変更することです。
$.fn.tabs = function(query, conf) {
このようなものに:
$.fn.fpTabs = function(query, conf) {
"flowplayer.org tabs" には "fpTabs" を使用しました。好きな名前を使用できます。これにより、他の場所で問題を引き起こすことなく、競合が解消されるはずです。もちろん、tabs.js
アップグレードする場合は変更したことを覚えておく必要がありますが、タブのないファイルをいじるよりも面倒ではありませんjquery-ui.js
。
この URL http://jqueryui.com/downloadで独自の jquery UI を構築できます。
jquery ツールとの競合を避けるため、必要なツールのみを選択し、オプションにコンポーネント TAB を含めないでください。
もっと簡単な方法があります。他のライブラリ (Tools | Prototype | MooTools | など) で jquery を使用するときはいつでも、特別な noConflict 関数を使用して $ を別の変数に再割り当てできます。例えば:
var $j = jQuery.noConflict(); // assign the main jQuery object to $j
$j("#tabs-container").tabs(); // use $j as you would normally use $
または、より明示的に $.someFunction の代わりに jQuery.someFunction() を使用することもできます。
私たちの解決策は、完全な jQuery UI と jQuery ツール ライブラリを含めることですがtabs
、jQuery ツール (私たちのサイトで使用する機能を含む) に干渉しないように、 jQuery UI の名前を変更する小さな JavaScript 修正を挿入することtabs
です。最初に jQuery UI をインポートします。 、修正を実行してから、jQuery ツールをインポートします。
// Both jQuery UI and jQuery Tools define a tabs function on jQuery objects.
// We use both libraries (jQuery Tools for its non-restricting tabs function and overlay; jQuery UI for autocomplete.)
// To avoid a conflict over tabs, rename the jQuery UI tabs. Call this code after loading jQuery UI but before
// calling jQuery Tools.
var oldTabs = $.fn.tabs;
delete $.fn.tabs;
$.fn.jQueryUiTabs = oldTabs;
他のプログラマーが誤って回避する可能性が低いように、これを設定することをお勧めします。ASP.NET MVC 4 環境にいるため、正しい順序でスクリプトを自動的に含めるスクリプト バンドルを作成します。
namespace OurWebApp
{
public class BundleConfig
{
/// <summary>
/// Good Bundling resource, succinctly highlighting a range of ways to use this feature:
/// http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification
/// </summary>
/// <param name="bundles"></param>
public static void RegisterBundles(BundleCollection bundles)
{
...
bundles.Add(new ScriptBundle("~/js/jquery-ui-and-tools").Include(
"~/Scripts/jquery-ui-1.9.2.min.js",
// Both jQuery UI and jQuery Tools define .tabs on jQuery objects. We use
// jQuery Tools' version, and this fix renames jQuery UI's version to get it out of the way.
// So the load order must be: jQuery UI, the fix, and then jQuery Tools
"~/Scripts/jquery-ui-jquerytools-tabsconflictfix.js",
"~/Scripts/jquery-tools-1.2.7.min.js"));
...
}
}
}
私の場合、jquerytools タブ関数の名前を変更します。から:
(e.initialIndex)}a.fn.tabs=関数(b,c){
に:
(e.initialIndex)}a.fn.tooltabs=関数(b,c){
したがって、jquery-ui-tools を変更する必要はありませんでした。これは、このスクリプトを CDN から取得する場合に役立ちます。