2013-02-17 11 views
5

Mam przycisk div, który ma atrybut title, który został użyty jako tekst dla wskazówek dotyczących narzędzi za pomocą jQueryUI. Chciałbym zmienić etykietkę przycisku, klikając go. Jednak po kliknięciu przycisku i uruchomieniu funkcji oddzwaniania mysz znajduje się nad elementem div, a tytuł jest pusty.Zmiana atrybutu tytułu przy użyciu jQuery podczas najechania na element

Jak naprawić ten problem? Wygląda na to, że widget jQueryUI Tooltip usuwa tytuł po najechaniu kursorem i umieszcza go z powrotem na myszy.

$(document).tooltip(); 
$(".btn").click(function(){ 
    alert($(this).attr("title")); // Expect to see T1 or T2 but shows blank 
    if ($(this).attr("title")=="T1"){ 
     $(this).attr("title","T2") 
    }else{ 
     $(this).attr("title","T1") 
    } 
}); 

żywo: http://jsfiddle.net/lordloh/ckTjA/

Bez widget jQueryUI Tooltip w miejscu, wszystko wydaje się działać prawidłowo: http://jsfiddle.net/lordloh/ckTjA/1/

Ponadto mam widżet podpowiedzi nałożoną na $(document). Nie mogę więc użyć $(this).tooltip("option","content"), ponieważ podpowiedź nie jest wyraźnie zastosowana na $(this). Powoduje to błąd JavaScript na konsoli.

2013-02-18: Od dzisiaj uruchamiam $(document).tooltip("destroy");, zmieniając atrybuty tytułu i $(document).tooltip();. Nie eleganckie rozwiązanie :-(szukam czegoś, co nie jest hack

Odpowiedz

3

widżet usuwa tekst od title przypisują zapobiec natywnej przeglądarki podpowiedź pojawianiu Kiedy usuwa tekst, przechowuje go w danych dołączonych do elementu

można zrobić to samo za pomocą tego wiersza kodu:..

$("#my-element").data("ui-tooltip-title", "My new tooltip message"); 

Teraz, jeśli użytkownik odsunie mysz od elementu, a następnie wróci do niej, wyświetli nowy tekst.

Aby natychmiast wyświetlić nowy tekst, musisz zaktualizować element nakładki na żywo, który na szczęście jest łatwy do znalezienia. Po prostu trzeba to zrobić po zaktualizowaniu tekst:

$(".ui-tooltip-content").html($("#my-element").data("ui-tooltip-title")); 

Testowane na jQuery UI 1.10.0.

+0

Dzięki. Dlaczego nie mogę uzyskać do niego dostępu poprzez '$ (this) .attr (" data-ui-tooltip-title ")'? –

+0

Widzę dwa wpisy w dokumentach - http: // api.jquery.com/jQuery.data/ i http://api.jquery.com/data/. Ten ostatni wydaje się używać atrybutu HTML5 "data- *". Zakładam, że '$ (" # my-element "). Data (" ui-tooltip-title ")' przechowuje dane gdzie indziej (?). –

+1

Myślę, że jQuery przechowuje tylko informacje w "danych-xxx" HTML5, jeśli element ma atrybut danych na początek. Jeśli nie, zapisuje go w wewnętrznej tablicy lub coś w tym stylu. – BG100

2

Przy użyciu widżetu podpowiedzi, można aktualizować zawartość za pośrednictwem własnego API.

$(this).tooltip('option', 'content', "New Content Goes Here"); 
+0

Niestety, nie wydają się działać na '$ (this)' jak mam ustawić wskazówkę na 'document'. –

+0

@LordLoh. dobrze może powinieneś zrobić to inaczej :-) – Pointy

+0

w chwili obecnej, Używam '$ (document) .tooltip (" destroy ");', zmieniając atrybuty tytułu i '$ (document) .tooltip();'. Nie jest to eleganckie rozwiązanie :-( –

0

Spróbuj tego:

$('document').ready(function() { $('document').tooltip(); $(".btn").click(function(){ alert($(this).attr("title")); if ($(this).attr("title")=="T1"){ $(this).attr("title","T2"); }else{ $(this).attr("title","T1"); } }); });

$ ('dokument') powinny być pojedyncze lub podwójne cudzysłowy (”lub„) i działa wyśmienitą dla mnie whitout $ ('dokument' ) .tooltip();

Powiązane problemy