jQueryUIツールチップがTwitterブートストラップと競合しています


141

次のコードを使用して、いくつかのツールヒントを最終的に機能させることができました。

<a href="#" rel="tooltip" title="Tool tip text here">Hover over me</a>

その後

<script>
    $('[rel=tooltip]').tooltip();
</script>

私が遭遇している問題は、Bootstrapsの代わりにjQueryUIツールチップ(矢印なし、大きな醜いツールチップ)を使用していることです。

jQueryUIの代わりにブートストラップツールチップを使用するには、何をする必要がありますか?


両方持っている必要がありますか?
Matt

いいえ。Bootstrapツールチップが欲しいだけです。
markdotnet

申し訳ありませんが、jquery uiとブートストラップが必要ですか?
Matt

1
これは私にとってはうまくいきました、この答えを
ポンチョ

1
@markdotnet:不正解です。ブートストラップには、JQuery.UI ではなく、コアJQueryライブラリが必要です。
Ian Kemp

回答:


191

tooltipプラグインの名前には、jQuery UIとBootstrapの両方が使用されます。使用$.widget.bridgejQueryのUIのバージョンに別の名前を作成して、ブートストラップを使用しようとして(という名前のツールチップ滞在するプラグインできるようにするnoConflict、ブートストラップのオプションは、それが正常に動作しないため、単にエラーの多くにつながるウィジェットその問題は、ここで報告されています):

// Resolve name collision between jQuery UI and Twitter Bootstrap
$.widget.bridge('uitooltip', $.ui.tooltip);

それを機能させるためのコード:

// Import jQuery UI first
<script src="/js/jquery-ui.js"></script>
// Resolve name collision between jQuery UI and Twitter Bootstrap
$.widget.bridge('uitooltip', $.ui.tooltip);
// Then import bootstrap
<script src="js/bootstrap.js"></script>

ボタンの競合も処理する素敵なコピー貼り付けコード:

<script type="application/javascript" src="/js/jquery.js"></script>
<script type="application/javascript" src="/js/jquery-ui.js"></script>
<script>
/*** Handle jQuery plugin naming conflict between jQuery UI and Bootstrap ***/
$.widget.bridge('uibutton', $.ui.button);
$.widget.bridge('uitooltip', $.ui.tooltip);
</script>
<script type="application/javascript" src="/js/bootstrap.js"></script>

1
これを試すとjsエラーが出ます。'undefined' is not an object (evaluating '$.widget.bridge')
covard 2013年

2
covar-すべてのsrcスクリプトがインポートされたことを確認しましたか?また、新しいバージョンのライブラリを使用していますか?
Demz 2013年

1
@covard:最初にjquery-uiをインポートし、次に処理を実行してbridgeから、ブートストラップをインポートすることが重要です。
Joshua Muheim 2014年

2
すべてをバンドルして縮小すると問題が発生するソリューションです。このスクリプトを何らかの方法で間に入れる方法はありません。
Piotr Kula、2015

2
縮小コードでWebpackバンドルを使用している場合は、bootstrap.jsの前にjquery-uiを置くだけです
Raj

69

簡単な解決策は、jquery-ui.jsの後にbootrap.jsをロードして、bootstrap .tooltipメソッドが優先されるようにすることです。


2
これは私にとってはうまくいき、最も簡単な方法です。ライブラリを1つずつロードする必要があることを示すHTMLコメントを追加することをお勧めします。
ポール

1
ある日、このようなアプローチを使用すると、ダイアログに閉じるアイコンが表示されなくなります。stackoverflow.com/questions/17367736/...
Oleksii Kyslytsyn

この解決策は私にはうまくいきませんでした。Chromeを使用すると、ページを「キャッシュをクリアしてハードリフレッシュ」し、ツールチップが機能する場合と機能しない場合があります(console.logにエラーはありません)。30回リフレッシュすると、7回の作業結果が得られました。次に、カスタマイズされたjQuery UIパッケージにアクセスしてダウンロードし、「キャッシュをクリアしてハードリフレッシュ」を30回実行すると、エラーなしで30回の作業結果が得られます。ライブラリが読み込まれる順序を簡単に制御できるように、require.jsを使用していることも追加します。
HPWD 2018

この最も簡単な論理的な修正が大好きです
Milind

30

これは私のために働きました:

JQuery-UIを使用する必要があるが、ブートストラップのツールチップを使用したい場合は、このWebサイトからJQuery-UIのカスタマイズバージョンを入手してください

"Tooltip"オプションのチェックを外してダウンロードしてください( "jquery-ui-1.10.4.custom.js"のようなものになります)。

現在使用しているバージョンではなく、プロジェクトに追加するだけで、パーティーの準備が整います。これにより、競合が回避されます。それは私にとって魅力のように働きました!


1
では、bowerのようなツールを使用する代わりに、片手でアセットファイルをダウンロードしますか?一般的にサードパーティのライブラリをどのようにインストールしますか?グーグルで検索して任意のサイトからダウンロードしますか?
user3746259 2015

ブートストラップツールチップを使いたくないのですが、UIを代わりに使用したいのですが、UIは問題を引き起こしています。
Piotr Kula、2015

2
シンプルで使いやすく、私の状況に最適です。ありがとうございました!+1
クリスケンペン

私のために働いた-本当にこれに頭を
悩ま

必要な機能のみを使用することを示唆している限り、最も合理的な答え。ありがとう
Oleksii Kyslytsyn

30

ケースでは、ロードする必要がありますjquery-ui.js後にbootstrap.jsここでそれを行う方法です。

<script type="application/javascript" src="/js/jquery.js"></script>
<script type="application/javascript" src="/js/bootstrap.js"></script>

<script>var _tooltip = jQuery.fn.tooltip;</script>
<script type="application/javascript" src="/js/jquery-ui.js"></script>
<script>jQuery.fn.tooltip = _tooltip;</script>

これはjquery-uiのツールチップをオーバーライドし、常にブートストラップを使用します。


1
ソリューションでは、uiツールチップはブートストラップで上書きされますが、上書きしたくない本体がある場合は、以前のソリューションを使用する必要があります
Projesh Pal

ある日、このようなアプローチを使用すると、ダイアログに閉じるアイコンが表示されなくなります。stackoverflow.com/questions/17367736/...
Oleksii Kyslytsyn

素晴らしい解決策!
Ivan Ferrer 2017

18

ブートストラップが初期化された後にUIが呼び出されると仮定します

UIが初期化される直前にブートストラップ関数を保存します

jQuery.fn.bstooltip = jQuery.fn.tooltip; 

次に、次のように呼び出します

$('.targetClass').bstooltip();

公式の方法 $.fn.bstooltip = $.fn.tooltip.noConflict();
イゴールJerosimić


9

代わりにBootstrapポップオーバーを使用するのはどうですか?BSポップオーバーでは、同じtooltip.jsコンポーネントが必要ですが、同じ競合は発生しません。はい、様式化されていますが、JQuery UIボタンが不安定になりません。

私はカスタムオートコンプリート/コンボボックスのみにJquery UIを使用しているため(他のJQ-UIコントロールは問題ないと主張できません)、BS Tooltipsを呼び出すと、コンボボックスボタンが「スタイルなし」になるCSSの問題を修正するために上記のどれも機能しませんでした。BSポップオーバーに切り替えると、本質的に同じ効果が得られ、競合、スクリプトインポートの並べ替え、明示的なブリッジステートメントは必要ありませんでした。


3
このように、非常に実用的
マーク・ストラトマン'19年

ヒントをありがとう、私は同意します、それはすべての複雑さを回避する回避策です。
トム・

Jaマン、dis 1つはすべての悪夢を解決し、レモンのように甘く見えます!
Piotr Kula、2015

ポップオーバーには前提条件としてツールチップが必要ですか?
小林氏

3

jQuery.noConflict()を使用してみてください、それが役立つかどうかを確認してください。ブートストラップとjQueryが同じ名前空間を使用しているように見え、おそらくブートストラップとjQueryツールチップが同じ関数に読み込まれるか、最初に読み込まれます。

どのライブラリが最初にロードされるかを確認することもできます。通常、JavaScriptで同じ関数を2回宣言すると、2番目の関数が使用されます。

3番目に、jQueryUIパッケージを(彼らのWebサイトで)チェックし、ツールチップが含まれていないバージョンをダウンロードできるかどうかを確認します(私がチェックしたところ、これは完全に実行可能です)。


これは奇妙です...私は同じ順序でJavaScriptライブラリをロードしていますが、問題が発生したとき、<body>タグの前にjquery-uiライブラリをロードし、すべてのコンテンツの後にbootstrap.jsをロードしていました。bootstrap.jsをコンテンツの上(ただしjquery-ui.jsの後も)に移動したところ、期待どおりのツールチップが表示されます。これが私のウェブサイトの世界を台無しにしないことを願っています。パフォーマンス上の理由から、コンテンツの後にできるJavaScriptをロードするのがベストプラクティスだと思いました...奇妙です。
markdotnet

それがベストプラクティスです。たぶん、ブートストラップが一番上にある必要がありますか?
Matt

Bootstrap JSは、ページの上部にある必要はありません。
ポールフィリップス

3

簡単で良い解決策があります。ブートストラップとjquery uiファイルのリンクを次のように再配置するだけです。

 <script src="/js/jquery-ui.min.js" type="text/javascript"></script>
 <script src="/js/bootstrap.min.js" type="text/javascript"></script>

boostrap jsファイルをロードする前に、jQueryuiをロードするだけです。それは私にとって仕事です。


1
ある日、このようなアプローチを使用すると、ダイアログに閉じるアイコンが表示されなくなります。stackoverflow.com/questions/17367736/...
Oleksii Kyslytsyn

ブートストラップminでuiのすべての一般的なプロパティをオーバーライドし、必要に応じて両方を使用することはできません
Projesh Pal

1

簡単な方法は、jquery-ui.jsの後にbootstrap.jsをロードして、bootstrap .tooltipがjquery UIをオーバーライドするようにすることです。requirejsのようなモジュールローダーを使用している場合は、ブートストラップをjquery-uiに依存させることができます。

requirejs.config({
    baseUrl: 'js',
    waitSeconds: 30,
    shim: {
        'bootstrap': {
            deps: [ 'jquery', 'jquery-ui' ]
        },...
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.