jQueryUI Araç İpuçları Twitter Bootstrap ile rekabet ediyor


141

Sonunda aşağıdaki kod ile çalışmak için bazı araç ipuçları elde edebildim :

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

ve sonra

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

İçinde çalışıyorum sorun Bootstraps yerine jQueryUI araç ipuçları (ok yok, büyük çirkin araç ipuçları) kullanıyor olmasıdır.

JQueryUI yerine Bootstrap Araç İpuçlarını kullanmak için ne yapmam gerekir?


her ikisine de ihtiyacın var mı?
Matt

Hayır ... Sadece Bootstrap araç ipuçlarına sahip olmak istiyorum.
markdotnet

Üzgünüm, demek istediğim jquery ui AND bootstrap'a ihtiyacınız var mı?
Matt

1
Bu benim için çalıştı, bu cevabı
Panço

1
@markdotnet: yanlış. Bootstrap, JQuery.UI için değil , temel JQuery kütüphanesini gerektirir .
Ian Kemp

Yanıtlar:


192

Hem jQuery UI hem de Bootstrap tooltipeklentinin adı için kullanır . Kullanım $.widget.bridge(kullanmaya çalışırken jQuery UI sürümü için farklı bir ad oluşturmak ve Bootstrap adlı araç ipucunu kalmak eklentisi izin noConflictdüzgün çalışmaması nedeniyle Widget sadece hataların bir sürü neden Bootstrap seçeneği; o konu burada bildirilmiştir ):

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

Bu yüzden çalışması için kod:

// 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>

Düğme çakışmasını da işleyen güzel kopya yapıştırma kodu:

<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
Bunu denediğimde bir js hatası alıyorum. 'undefined' is not an object (evaluating '$.widget.bridge')
covard

2
covar - tüm src komut dosyalarını içe aktardığınızdan emin misiniz? Ve kütüphanelerin daha yeni sürümlerini mi kullanıyorsunuz?
Demz

1
@covard: Önce jquery-ui'yi içe aktarmanız, sonra bir bridgeşey yapmanız ve ardından bootstrap'i içe aktarmanız önemlidir .
Joshua Muheim

2
Eğer her şey paketlenmiş ve küçültülmüşse bir acı olan bir çözüm .. bu senaryo bir şekilde içine koymak için yolu yoktur .. dammit, isim çarpışma çöp.
Piotr Kula

2
Küçültülmüş kodlu webpack paketleri kullanıyorsanız, bootstrap.js'den önce jquery-ui'yi koyabilirsiniz
Raj

69

Basit bir çözüm, jquery-ui.js'den sonra bootrap.js'yi yüklemektir, böylece bootstrap .tooltip yöntemi öncelik kazanır.


2
Bu benim için çalıştı ve en kolay yol. Bir kitaplığın birbiri ardına yüklenmesi gerektiğini belirten bir HTML yorumu eklemenizi öneririm.
Paul

1
Bir gün, bu yaklaşımı kullanarak diyaloglarda yakın simge eksik olacak. stackoverflow.com/questions/17367736/…
Oleksii Kyslytsyn

Bu çözüm benim için işe yaramadı. Chrome'u kullanarak sayfayı "önbelleği ve sert yenilemeyi temizlerim" ve araç ipucu bazen işe yarayabilir ve bazen işe yaramayacaktır (console.log'da hata yok). 30 kez ferahlatıcı çalışma sonuçları 7 kez üretildi. Sonra gittim ve özelleştirilmiş bir jQuery UI paketi indirdim ve şimdi 30 kez "önbellek ve sert yenileme" temizlediğimde, 0 hata ile 30 kez çalışma sonuçları alıyorum. Ayrıca kolayca kitaplıkların yüklenme sırasını kontrol edebilirsiniz requir.js kullandığımı eklemek istiyorum.
HPWD

Bu basit mantıksal düzeltme için Seni SEVİYORUM
Milind

30

Bu benim için çalıştı:

JQuery-UI kullanmanız gerekiyor ancak bootstrap araç ipucunu kullanmak istiyorsanız, bu web sitesinden özelleştirilmiş bir JQuery-UI sürümü edinin .

Basitçe "Araç İpucu" seçeneğinin işaretini kaldırın ve indirin ("jquery-ui-1.10.4.custom.js" gibi bir şey olacaktır).

Şu anda kullanmakta olduğunuz sürüm yerine projenize eklemeniz yeterlidir ve partiye hazırsınız. Bu çatışmayı önleyecektir. Benim için bir cazibe gibi çalıştı!


1
Yani hala bower gibi bir araç kullanmak yerine her bir taraftan varlık dosyalarını indiriyor musunuz? Genel olarak üçüncü taraf kütüphanelerini nasıl kurarsınız? Google'da arama yapın ve herhangi bir siteden indirdiniz mi?
user3746259

nasıl bootstrap araç ipucu kullanmak istemiyorum ama bunun yerine UI bir .. onlar herhangi bir şekilde soruna neden olanlar.
Piotr Kula

2
Basit, kolay, durumum için harika çalıştı. Teşekkür ederim! +1
Chris Kempen

Benim için çalıştı - gerçekten bu konuda kafamı beceriyor - artı bir - teşekkür ederim
gchq

En makul cevap, sadece gerekli işlevselliği almayı önerdiği sürece. Teşekkürler
Oleksii Kyslytsyn

30

Bundan jquery-ui.jssonra yüklemeniz gerekiyorsa bootstrap.js, bunu nasıl yapacağınız aşağıda açıklanmıştır:

<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>

Bu jquery-ui araç ipucunu geçersiz kılar ve her zaman önyükleme kullanır.


1
çözümünüzde ui araç ipucu bootstrap ile üzerine yazılacak, ancak herhangi bir vücut üzerine yazmak istemiyorsanız önceki çözümü kullanmak zorunda
Projesh Pal

Bir gün, bu yaklaşımı kullanarak diyaloglarda yakın simge eksik olacak. stackoverflow.com/questions/17367736/…
Oleksii Kyslytsyn

harika bir çözüm!
Ivan Ferrer

18

Bootsrap başlatıldıktan sonra kullanıcı arayüzünün çağrılacağını varsayarsak

Bootstrap işlevini kullanıcı arayüzü başlatılmadan hemen önce saklayın

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

Sonra şu şekilde çağırın

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

Official way $.fn.bstooltip = $.fn.tooltip.noConflict();
Igor Jerosimić

9

Bu çözüm benim için iyi çalışıyor gibi görünüyor.

// handle jQuery plugin naming conflict between jQuery UI and Bootstrap
$.widget.bridge('uibutton', $.ui.button);
$.widget.bridge('uitooltip', $.ui.tooltip);

9

Bunun yerine sadece Bootstrap popover'ları kullanmaya ne dersiniz? BS popovers, aynı tooltip.js bileşenini gerektirmelerine rağmen aynı çakışmayı oluşturmaz. Evet, daha stilize edilmiş ancak JQuery UI düğmelerimin sakat olmasına neden olmuyor.

Jquery UI yalnızca özel otomatik tamamlama / comboboxes için kullanıyorum (bu yüzden diğer JQ-UI denetimlerinin iyi olduğunu iddia edemez) ve yukarıdakilerin hiçbiri BS Tooltips'i çağırırken combobox düğmelerinde "biçimlenmemiş" hale gelen CSS sorununu düzeltmek için çalıştı. BS Popovers'a geçiş, çakışma, komut dosyası içe aktarma işlemimin yeniden sıralanması ve açık köprü ifadelerine gerek olmadan temelde aynı etkiyi sağladı.


3
Bu şekilde, çok pragmatik
Mark Stratmann

Bahşiş için teşekkürler, katılıyorum, bu tüm karmaşıklığı önleyen bir çözüm.
Tom

Ja man, dis bir bütün kabusları çözer ve limon gibi tatlı görünüyor!
Piotr Kula

Popovers, ön gereksinim olarak ipucu gerektirmez mi?
MrKobayashi

3

jQuery.noConflict () kullanmayı deneyin ve bunun size yardımcı olup olmadığını görün. Önyükleme ve jQuery aynı ad alanını kullanıyor gibi görünüyor ve belki de bootstrap ve jQuery araç ipuçları aynı işleve yüklenir veya birincisi önce yüklenir.

Önce hangi kitaplığın yüklendiğini de kontrol edebilirsiniz. Genellikle aynı işlevi javascript'te iki kez bildirirseniz, ikincisi kullanılan işlevdir.

Üçüncüsü, jQueryUI paketini ( web sitelerinde) kontrol edin ve araç ipuçlarını içermeyen bir sürümü indirip indiremeyeceğinizi görün (kontrol ettim ve bu tamamen yapılabilir).


Bu garip ... Javascript kütüphanelerini aynı sırayla yüklüyorum ama sorun yaşadığımda, jquery-ui kütüphanesini <body> etiketimden ve bootstrap.js'den önce tüm içeriğimden yüklüyordum. Bootstrap.js dosyasını içeriğimin üzerine taşıdım (ancak yine de jquery-ui.js'den sonra) ve şimdi beklediğim gibi araç ipuçlarını oluşturuyor. Umarım bu benim web sitemin evrenini bozmaz. Performans nedenlerinden ötürü içerikten sonra alabileceğiniz javascript'i yüklemenin en iyi uygulama olduğunu düşündüm ... tuhaf.
markdotnet

en iyi uygulamadır. Belki de bootstrap üstte olmalı?
Matt

Bootstrap JS kesinlikle sayfanın üstünde olmak zorunda değil.
Paul Phillips

3

Kolay ve iyi bir çözüm var, sadece bootstrap ve jquery ui dosya bağlantınızı aşağıdaki gibi yeniden düzenleyin:

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

Sadece boostrap js dosyasını yüklemeden önce jQueryui'yi yükleyin. Benim için iş.


1
Bir gün, bu yaklaşımı kullanarak diyaloglarda yakın simge eksik olacak. stackoverflow.com/questions/17367736/…
Oleksii Kyslytsyn

bootstrap min ile
ui'nin

1

Kolay bir yol, jquery-ui.js'den sonra bootstrap.js'yi yüklemektir, böylece bootstrap .tooltip jquery UI'larını geçersiz kılar. Requijs gibi bir modül yükleyici kullanıyorsanız, bootstrap'i jquery-ui'ye bağımlı hale getirebilirsiniz, örneğin:

requirejs.config({
    baseUrl: 'js',
    waitSeconds: 30,
    shim: {
        'bootstrap': {
            deps: [ 'jquery', 'jquery-ui' ]
        },...
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.