jQueryUI 툴팁이 Twitter 부트 스트랩과 경쟁합니다


141

나는 일 몇 가지 도구 설명 얻을 수 있었다 마지막으로 다음 코드를 :

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

그리고

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

내가 겪고있는 문제는 부트 스트랩 대신 jQueryUI 툴팁 (화살표, 큰 추악한 툴팁)을 사용하고 있다는 것입니다.

jQueryUI 대신 부트 스트랩 툴팁을 사용하려면 어떻게해야합니까?


두 가지가 모두 필요합니까?
Matt

아뇨 .. 부트 스트랩 툴팁을 갖고 싶습니다.
markdotnet

죄송합니다, jquery ui AND bootstrap이 필요하십니까?
Matt

1
이것은 나를 위해 일했습니다.이 답변을
Poncho

1
@markdotnet : 잘못되었습니다. 부트 스트랩에는 JQuery.UI가 아닌 핵심 JQuery 라이브러리가 필요합니다 .
이안 켐

답변:


192

jQuery UI와 Bootstrap tooltip은 모두 플러그인 이름을 사용합니다. 사용 $.widget.bridge(이용하려고 jQuery를 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

2
covar-모든 src 스크립트를 가져 왔는지 확인 했습니까? 최신 버전의 라이브러리를 사용하고 있습니까?
Demz

1
@ covard : 먼저 jquery-ui를 가져온 다음 작업을 수행 bridge한 다음 부트 스트랩을 가져 오는 것이 중요합니다 .
Joshua Muheim

2
모든 것을 묶고 축소하면 고통스러운 해결책입니다.이 스크립트를 어떻게 든 넣을 방법이 없습니다.
Piotr Kula

2
코드가 축소 된 웹팩 번들을 사용하는 경우 bootstrap.js 앞에 jquery-ui를 추가하면됩니다.
Raj

69

간단한 해결책은 jquery-ui.js 다음에 bootrap.js를로드하여 bootstrap .tooltip 메소드가 우선하도록하는 것입니다.


2
이것은 나를 위해 일했으며 가장 쉬운 방법입니다. 한 라이브러리를 다른 라이브러리에로드해야한다는 HTML 주석을 추가하는 것이 좋습니다.
Paul

1
언젠가는 이러한 접근 방식을 사용하여 대화 상자에서 닫기 아이콘이 누락됩니다. stackoverflow.com/questions/17367736/…
Oleksii Kyslytsyn

이 솔루션은 저에게 효과적이지 않았습니다. Chrome을 사용하여 페이지를 "캐시 지우기 및 하드 새로 고침"으로하면 툴팁이 작동하는 경우도 있고 때로는 작동하지 않을 수도 있습니다 (console.log에 오류 없음). 30 번 새로 고침하면 7 번 작업 결과가 나왔습니다. 그런 다음 사용자 정의 jQuery UI 패키지를 다운로드하여 30 번 "캐시 지우기 및 새로 고침"을 30 번 수행하면 작업 오류가 30 번 발생하고 오류가 30 회 발생합니다. 또한 require.js를 사용하고 있으므로 라이브러리가로드되는 순서를 쉽게 제어 할 수 있습니다.
HPWD

이 간단한 논리적 인 수정을 위해 당신을 사랑합니다
Milind

30

이것은 나를 위해 일했다 :

JQuery-UI를 사용해야하지만 부트 스트랩의 툴팁을 사용하려면이 웹 사이트 에서 사용자 정의 된 JQuery-UI 버전을 얻으십시오 .

"도구 설명"옵션을 선택 해제하고 다운로드하십시오 ( "jquery-ui-1.10.4.custom.js"와 같은 것임).

현재 사용중인 버전 대신 프로젝트에 추가하면 파티 준비가 완료됩니다. 이것은 충돌을 피할 것입니다. 그것은 나에게 매력처럼 작동했습니다!


1
따라서 bower와 같은 도구를 사용하는 대신 여전히 한 손으로 각 측면에서 자산 파일을 다운로드합니까? 일반적으로 타사 라이브러리를 어떻게 설치합니까? Google에서 검색하여 모든 사이트에서 다운로드 하시겠습니까?
user3746259

어떻게 부트 스트랩 툴팁을 사용하고 싶지 않지만 대신 UI 팁을 사용하고 싶지는 않습니다. 어떤 방식 으로든 문제를 일으키는 것입니다.
Piotr Kula

2
간단하고 쉬우 며 제 상황에 잘 맞았습니다. 감사합니다! +1
Chris Kempen

나를 위해 일했습니다-정말로 이것으로 내 머리를 두드리고 있습니다
gchq

필요한 기능 만 사용하는 것이 가장 좋습니다. 감사합니다
Oleksii Kyslytsyn

30

혹시로드해야합니다 jquery-ui.jsbootstrap.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

18

부트 스트랩이 초기화 된 후 UI가 호출된다고 가정

UI가 초기화되기 직전에 부트 스트랩 기능을 저장하십시오.

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

그런 다음 다음과 같이 호출하십시오.

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

공식적인 방법 $.fn.bstooltip = $.fn.tooltip.noConflict();
Igor Jerosimić

9

이 솔루션 은 저에게 잘 작동하는 것 같습니다.

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

9

대신 부트 스트랩 팝 오버를 사용하는 것은 어떻습니까? BS popover는 동일한 tooltip.js 구성 요소가 필요하지만 동일한 충돌을 일으키지 않습니다. 예, 더 양식화되어 있지만 JQuery UI 버튼이 불안 정해지지는 않습니다.

사용자 정의 자동 완성 / 콤보 상자에만 Jquery UI를 사용하고 있으므로 다른 JQ-UI 컨트롤은 괜찮다고 주장 할 수 없으며 위의 어느 것도 BS 툴팁을 호출 할 때 콤보 상자 버튼의 CSS 문제를 "스타일이 지정되지 않은"것으로 수정하지 못했습니다. BS Popovers로 전환하면 충돌없이, 스크립트 가져 오기 순서가 변경되지 않으며, 명시적인 브리지 문이 필요하지 않은 동일한 효과를 기본적으로 제공했습니다.


3
이와 같이, 매우 실용적입니다
Mark Stratmann

팁 주셔서 감사합니다. 모든 복잡성을 피하는 해결 방법입니다.
Tom

Ja man, dis one은 모든 악몽을 해결하고 레몬처럼 looking 어 보입니다!
Piotr Kula

팝 오버에는 사전 요구 사항으로 툴팁이 필요하지 않습니까?
MrKobayashi

3

jQuery.noConflict ()를 사용하여 도움이되는지 확인하십시오. 부트 스트랩과 jQuery가 동일한 네임 스페이스를 사용하는 것처럼 보이고 아마도 부트 스트랩과 jQuery 툴팁이 동일한 기능에로드되거나 하나가 먼저로드됩니다.

어떤 라이브러리가 먼저로드되었는지 확인할 수도 있습니다. 일반적으로 자바 스크립트에서 동일한 함수를 두 번 선언하면 두 번째 함수가 사용됩니다.

셋째, 웹 사이트 에서 jQueryUI 패키지를 확인하고 툴팁이 포함되지 않은 버전을 다운로드 할 수 있는지 확인하십시오 (확인하고 완전히 수행 가능합니다).


그래서 이것은 이상합니다 ... 자바 스크립트 라이브러리를 동일한 순서로로드하고 있지만 문제가 발생했을 때 내 <body> 태그 전에 jquery-ui 라이브러리를로드하고 모든 내용 뒤에 bootstrap.js를로드했습니다. bootstrap.js를 내 컨텐츠 위로 옮겼지만 (jquery-ui.js 이후) 여전히 예상대로 툴팁을 렌더링합니다. 이것이 내 웹 사이트의 세계를 망칠 수 있기를 바랍니다. 성능상의 이유로 콘텐츠 뒤에 자바 스크립트를로드하는 것이 가장 좋은 방법이라고 생각했습니다 ... 이상합니다.
markdotnet

모범 사례입니다. 부트 스트랩이 맨 위에 있어야합니까?
Matt

Bootstrap JS는 페이지 상단에있을 필요는 없습니다.
Paul Phillips

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.