2012-10-24 3 views
18

수동으로 jquery UI 툴팁을 닫을 수있는 방법이 있습니까? 난 단지 클릭 이벤트를 on/off 토글에 반응하기를 원한다. .tooltip ('open')을 호출하지 않으면 모든 마우스 이벤트를 바인딩 해제 할 수 있습니다. 초기화하지 않거나 이벤트를 설정하지 않아도됩니다. 초기화하지 않고 .tooltip ('open')을 실행하려고하면 불평합니다. 큰소리로 초기화되지 않는다.jquery UI 툴팁 수동 열기/닫기

+2

에 의해 사라지는 tooltop를 이동하여 사라지고 tooltop하지만, 마우스 추적을 활성화. 수동으로 열면 마우스 트랙이 작동하지 않는 것 같습니다. – theblang

답변

12

jltwoo, 두 개의 다른 부울 스위치를 사용하여 자동 열기 및 자동 닫기를 사용하도록 제안 할 수 있습니까? 이와 같이 표시됩니다 코드를 변경 :

(function($) { 
    $.widget("custom.tooltipX", $.ui.tooltip, { 
    options: { 
     autoShow: true, 
     autoHide: true 
    }, 

    _create: function() { 
     this._super(); 
     if(!this.options.autoShow){ 
     this._off(this.element, "mouseover focusin"); 
     } 
    }, 

    _open: function(event, target, content) { 
     this._superApply(arguments); 

     if(!this.options.autoHide){ 
     this._off(target, "mouseleave focusout"); 
     } 
    } 
    }); 

}(jQuery)); 

을 이러한 방법으로, 같은 툴팁을 초기화 :

$(someDOM).tooltipX({ autoHide:false }); 

마우스가 요소 위에있을 때 그 자체로 표시되지만 수동 가까이에 있습니다 그것. 그냥 이벤트 바인딩을 해제하려면

$(someDOM).tooltipX({ autoShow:false, autoHide:false }); 
+0

이 답변에 대한 실제적인 노력 - 한 줄짜리로 클릭 바인딩을 단순화했습니다! :) (할당 표현식은 할당 된 값을 반환합니다.) ::: https://jsfiddle.net/nuv8v1ct/ –

7

툴팁에 사용 중지 옵션이 있습니다. 그럼 내가 여기에 그것을 사용하고 코드입니다 내 다른 의견에

$('a').tooltip({ 
    disabled: true  
}).click(function(){  
    if($(this).tooltip('option', 'disabled')) 
     $(this).tooltip('option', {disabled: false}).tooltip('open'); 
    else 
     $(this).tooltip('option', {disabled: true}).tooltip('close'); 
}).hover(function(){ 
    $(this).tooltip('option', {disabled: true}).tooltip('close'); 
}, function(){ 
    $(this).tooltip('option', {disabled: true}).tooltip('close'); 
}); 
+1

나는 그것을 시도했다. 귀하의 예제에서 작동하는 동안, 실제로 (코드를 읽은 후) 마우스를 놓을 때 툴팁의 자동 닫힘을 차단하는 실제 방법은 없습니다. – hyperair

+4

이 작동합니다 : close : function (event, ui) {ui.tooltip.stop(); [link] (http://jqueryui.com/tooltip/#custom-animation) – Hontoni

+1

@Antonimo 표시 한 코드는 애니메이션을 멈추게 만합니다. domTree를 실제로 확인하면 여러 UI 툴팁 DOM이 생성됩니다. 선호. 안타깝게도 jquery-ui 툴팁이 코딩 된 방식으로, "open"이벤트 다음에 mouselease/focusout 이벤트가 첨부되므로 툴팁이 닫히지 않도록 해당 이벤트를 쉽게 제거 할 수 없습니다. 상태 변수가 지워진 후에 만 ​​close 이벤트가 호출되는 것과 동일합니다. 중지하기에는 너무 늦었습니다. 툴팁이 추가로 개선 될 때까지 우리는 툴팁을 확장하고 사용자 정의를해야합니다. – jltwoo

4

관련, 나는 원래의 코드로 보았다/닫기 위젯을 확장하고 버전 JQuery와 - UI v1을 가진 자동 숨기기 옵션을 추가하여 수동 개방 달성 .10.3. 기본적으로 나는 _create 및 내부 _open 호출에 추가 된 마우스 리스너를 제거합니다.

편집 :

데모 여기 @MscG에 의해 제안으로 두 개의 깃발로 자동 숨기기 및 자동 편애 분리 : 이제 http://jsfiddle.net/BfSz3/

(function($) { 
    $.widget("custom.tooltipX", $.ui.tooltip, { 
    options: { 
     autoHide:true, 
     autoShow: true 
    }, 

    _create: function() { 
     this._super(); 
     if(!this.options.autoShow){ 
     this._off(this.element, "mouseover focusin"); 
     } 
    }, 

    _open: function(event, target, content) { 
     this._superApply(arguments); 

     if(!this.options.autoHide){ 
     this._off(target, "mouseleave focusout"); 
     } 
    } 
    }); 

}(jQuery)); 

당신이 수동으로 툴팁을 설정할 수 있습니다 초기화 할 때 autoHide를 설정하여 표시 또는 숨기기 : false :

$(someDOM).tooltipX({ autoHide:false }); 

그리고 공식 풀 요청을 할 수있는 시간이 될 때까지이해야 할 것, 다른 곳에서

$(someDOM).tooltipX("open"); // displays tooltip 
$(someDOM).tooltipX("close"); // closes tooltip 

간단한 핫픽스를 필요에 따라 바로 바로 코드의 표준 열기/닫기 호출을 수행합니다.

10

및 사용자 정의 툴팁을 좋아 woudn't : 수동 개폐 모두 동작을 제어하려면

, 당신은 간단하게 사용할 수 있습니다.

$("#some-id").tooltip(tooltip_settings) 
      .on('mouseout focusout', function(event) { 
        event.stopImmediatePropagation(); 
      }); 

$("#some-id").attr("title", "Message"); 
$("#some-id").tooltip("open"); 

로 마우스를 차단 마우스 커서를

대한 focusOut 블록 키보드 탐색 내가 수동으로 열어야합니다