2014-07-11 14 views
9

Próbując tymczasowo wyłączyć podpowiedzi jQueryJak ponownie włączyć etykietkę jQuery po wyłączeniu = true?

$(document).tooltip("option", "disabled", true); 

Kiedy próbuję włączyć je ponownie, wszystkie atrybuty title zniknęły. Starałem się ponownie włączyć je za pomocą:

$(document).tooltip("option", "disabled", false); 

W title atrybutów jest rzeczywiście całkowicie usunięty Kiedy po raz pierwszy ustawić go disabled do true.

próbował również:

$(document).tooltip("disable"); 
$(document).tooltip("enable"); 

Jest on robi to samo ...

Aktualizacja

znalazł rozwiązanie na moje własne pytanie z pomocą Jasen i zgr024. Zobacz below.

+2

kiedy ponownie włączyć podpowiedzi powinien kontynuować pracę .. http://jsfiddle.net/D8gMy/ –

+1

Ten [jsfiddle] (http: // jsfiddle .net/xMxqg/2 /) robi _nie_ kontynuuje pracę jquery v2.1.0 i ui v1.11. Z jakiej wersji bibliotek korzystasz? To wygląda na błąd. – Jasen

+1

jQuery v1.11.1 jQuery UI - v1.11.0 – codenamezero

Odpowiedz

4

Więc z pomocą innych, wyżej, w końcu znalazłem lepsze rozwiązanie. To nie wymaga brutalnej poprawki do ponownego dodawania title do każdego pojedynczego elementu. Nie zrozumcie mnie źle, ta poprawka zadziała, ale wydajność jest ważna (szczególnie nadal potrzebuję wsparcia dla IE8).

Zasadniczo dodaję zmienną niestandardową do obiektu tooltip, może to być także zmienna globalna. Ponieważ wszystko jest Object w js, możesz po prostu dodać wszystko, co chcesz.

$(document).tooltip.temporarilyOff 

Wtedy kiedy zainicjować tooltip jQuery, po prostu trzeba dodać kontrolę w open:

var settings = {}; 
settings.tooltipClass = "tooltip"; 
settings.open = function (event, ui) { 
    if ($(document).tooltip.temporarilyOff) { 
     ui.tooltip.stop().remove(); 
    } 
}; 
$(document).tooltip(settings); 

wtedy kiedy muszę tymczasowo wyłączyć podpowiedzi jQuery, tylko trzeba, aby przełączyć flaga wszędzie, gdzie chcę. Tak:

$(document).tooltip.temporarilyOff = true; 

Anything po tym momencie, etykietka nie zostanie uruchomiona, a wszystkie elementy będą trzymać swoje title atrybuty. Kiedy skończę z tym, co robię, wystarczy ustawić flagę z powrotem na false, a podpowiedź będzie działać dokładnie tak, jak poprzednio.

Prawdopodobnie mogę zrobić to w wtyczce jQuery dla łatwiejszych połączeń, a także ukryć nieco paskudną nazwę zmiennej ... ale w każdym razie to jest idea. Myślę, że jest to o wiele lepsza poprawka, ponieważ nie zmusi jQuery do usunięcia atrybutu title za nic, a następnie dodając go później, robiąc dwukrotnie bezużyteczną pracę.

Oto updated example rozwidlony od @ oryginalnej jsFiddle Jasen za:

3

Wygląda na to, że jest to błąd związany z wersją jquery, więc po wyłączeniu etykiet narzędzi trzeba wstawić atrybut title.

Użyj nazwy klasy w elemencie podpowiedzi, które należy ponownie włączyć lub użyć selektora atrybutu [title].

<input type="text" class="tooltip-hack" title="tooltip text" /> 

$("#disable").on("click", function (e) { 
    var tooltips = $("[title]"); // or $(".tooltip-hack") 
    $(document).tooltip("disable"); 
    tooltips.attr("title", ""); 
}); 

Użyj najmniej destruktywnego z dwóch, w zależności od twojej struktury html.

Należy również zauważyć, że atrybuty tytułu wszystkie są usuwane, dlatego należy wybierać bardziej selektywnie za pomocą podpowiedzi.

// instead of 
$(document).tooltip(); 

// use a more restrictive selector 
$(".tooltip-hack").tooltip(); 

przykład robocza: jsFiddle

+0

Czy istnieje sposób dostępu/modyfikacji globalnego obiektu jquery.ui.tooltip? Chcę dynamicznie modyfikować "otwarty". – codenamezero

+0

Możesz użyć '.tooltip ({open: function (e, ui) {}}), a następnie możesz określić funkcję do uruchomienia. Jeśli potrzebujesz więcej pomocy, powinieneś otworzyć nowe pytanie. – Jasen

0

Codenamezero jest dobrym przykładem rozszerzenia przedmiotu w jQuery/js, ale można to zrobić out-of-the-box:

$(document).tooltip("disable").tooltip("hide"); 

$(document).tooltip("enable").tooltip("show"); 

mam walidacji gdzie metoda ta może być przydatna, aby zastąpić domyślne

+0

To fajne, czy to nowe? Nie pamiętam, żebym miał tę funkcję kilka lat temu hehe ... Dzięki za napiwek! – codenamezero

Powiązane problemy