2012-10-24 16 views
18

Czy istnieje sposób, aby ręcznie otworzyć zamknięcie jquery ui tooltip? Po prostu chcę, aby reagowała na zdarzenie typu "kliknięcie" włączające/wyłączające. Możesz odłączyć wszystkie zdarzenia myszy i ponownie je powiązać podczas wywoływania .tooltip ("otwórz"), nawet jeśli nie powinno się inicjować ani ustawiać zdarzeń imo, ponieważ jeśli spróbujesz uruchomić .tooltip ("otwórz") bez inicjowania, to narzeka głośno o braku inicjalizacji.jquery ui tooltip manual open/close

+2

muszę ręcznie go otworzyć, ale ze śledzeniem myszą. Ścieżka myszy nie działa, jeśli ręcznie ją otworzysz. – theblang

Odpowiedz

12

jltwoo, czy mogę zaproponować użycie dwóch różnych przełączników binarnych, aby umożliwić automatyczne otwieranie i automatyczne zamykanie? Z tego zmienić swój kod będzie wyglądać następująco:

(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)); 

W ten sposób inicjowania podpowiedź jak:

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

pokazuje sama, gdy wskaźnik myszy znajduje się nad elementem, ale trzeba ręcznie blisko to.

Jeśli chcesz ręcznie sterować zarówno otwieranie i zamykanie działania, można po prostu użyć:

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

Praca na tym poziomie skrzypiec - Uprościliśmy także wiązanie kliknięć do jednej linijki! :) (wyrażenie przypisania zwraca przypisaną wartość) ::: https://jsfiddle.net/nuv8v1ct/ –

7

Etykietka narzędzi ma opcję wyłączenia. Dobrze użyłem go i oto kod:

$('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

Próbowałem tego. Podczas gdy działa na twoim przykładzie, w rzeczywistości (po przeczytaniu kodu) nie ma żadnego realnego sposobu blokowania automatycznego zamykania etykiety narzędzia po myszy. – hyperair

+4

to działa: close: function (event, ui) {ui.tooltip.stop(); [link] (http://jqueryui.com/tooltip/#custom-animation) – Hontoni

+1

@Antonimo Pokazany kod zatrzymuje animację, jeśli faktycznie sprawdzisz domTree, tworzysz wiele DOM-narzędziowych DOM, zdecydowanie nie coś preferowane. Niestety sposób w jaki zakodowana jest etykieta narzędzia jquery-ui, zdarzenia mouselease/focusout są dołączane po "otwartym" zdarzeniu, więc nie możemy łatwo usunąć tych zdarzeń po ich dołączeniu, aby zapobiec zamykaniu podpowiedzi. To samo dotyczy wywoływania zdarzenia close po usunięciu zmiennych stanu, byłoby za późno, aby się zatrzymać. Dopóki ta podpowiedź nie zostanie jeszcze ulepszona, będziemy musieli ją rozszerzyć i wprowadzić własne modyfikacje. – jltwoo

4

związane z moją innych uwag, zajrzałem do oryginalnego kodu i osiągnąć instrukcja otwierania/zamykania poprzez rozszerzenie widget i dodanie opcji AutoHide wersji jQuery UI v1 .10.3. Zasadniczo po prostu usunięto programy nasłuchujące myszy, które zostały dodane w _create i wewnętrznym _ otwierającym się wywołaniu.

Edit: separacji AutoHide i Autoshow jako dwa oddzielne flagi jak sugeruje @MscG

Demo tutaj: 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)); 

Teraz, kiedy zainicjować można ustawić podpowiedź, aby ręcznie pokaż lub ukryj, ustawiając autoHide: false:

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

I właśnie bezpośrednio wykonywać standardowe otwierania/zamykania połączeń w kodzie jako potrzebne gdzie indziej

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

prosty poprawkę, dopóki nie mają czasu, aby zrobić oficjalny wniosek ściągania, będzie to musiał zrobić.

10

Jeśli chcesz po prostu rozpiąć zdarzenia i nie chciałby, aby swój własny podpowiedź.

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

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

mouseout blokuje tooltop znikają przesuwając kursor myszy

focusOut blokuje tooltop znikają przez nawigacji klawiatury