2013-04-22 16 views
13

Mam ten kod do pracy do tej pory:Jak zmienić tekst przycisku w JQuery

Fiddle: http://jsfiddle.net/r4emt/12/

Teraz przed wprowadzeniem autouzupełniania jQuery UI, przycisk napis „Hello”. Możesz wpisać "element" w autouzupełnianiu interfejsu JQuery, a zauważysz, że przycisk mówi teraz "Świat". Kliknij przycisk "świat", aby umieścić element na liście. Jeśli ponownie wpisujesz przedmiot, możesz go wybrać i kliknąć przycisk "zastąp" na elemencie już znajdującym się na liście. Jednak gdy to zrobisz, przycisk nadal mówi "świat", ale powinien powiedzieć "cześć", ponieważ nie ma nic w polu wejściowym. Jeśli klikniesz w polu wprowadzania, a następnie trafisz przycisk usuwania lub powrotu, zmieni się on z powrotem na "cześć", ale nie ma nic do usunięcia lub przejścia z lewej strony. Myślę, że ma zrobić z tej części kodu:

$('#inputWrapper').on('keyup', '#tags', function() { 
    if($(this).val() == '') { 
     $('button.addButton').text('Hello'); 
    } else { 
     $('button.addButton').text('World'); 
    } 
}); 

W szczególności, „keyup” część. Moje pytanie brzmi: jak mogę to naprawić, aby za każdym razem, gdy pole wejściowe było puste, przycisk zawsze brzmi "cześć", a gdy w polu jest wejście, przycisk brzmi "świat"? Dzięki!

+1

Proponuję użyć Zdarzenie 'textchanged' zamiast polegać wyłącznie na keyup, ponieważ zadziała nawet wtedy, gdy ktoś wklei tekst lub wklei do tekstu: http://www.zurb.com/playground/jquery-text-change-custom-event – techfoobar

+0

Wow, dzięki za sugestię! Wygląda na to, że jest dokładnie to, czego potrzebuję. Jak dokładnie zainstalować tę wtyczkę? I czy ma znaczenie, gdzie zawieram linię

1

Nie możesz po prostu ustawić tekstu z powrotem na Hello po kliknięciu? Dodaj to do dołu kliknij przycisk funkcji:

$(this).text('Hello'); 

http://jsfiddle.net/r4emt/13/

+0

Doceniam pomoc, ale to nie rozwiązało problemu. Jeśli ją zastąpisz, przycisk nadal będzie brzmiał "świat". – sbru

+0

Nie widzę twojej sortowalnej listy w skrzypcach. Widzę tylko pole tekstowe i przycisk. –

+0

Przycisk dodaje elementy do listy do sortowania ... – sbru

0

Put stan jak ten

if($.trim($(this).val()) == '')

do usuwania niechcianych spacji. Ponadto, należy zmienić tekst przycisku na „Hello” w procedurze obsługi zdarzenia click

Dodaj to na końcu funkcji kliknij: $(this).text('Hello');

Oto kod: http://jsfiddle.net/r4emt/34/

+0

Doceniam pomoc, ale to nie rozwiązało problemu. Jeśli ją zastąpisz, przycisk nadal będzie brzmiał "świat". – sbru

+0

Czy masz funkcję uruchamianą po kliknięciu przycisku? – armandocj

+0

Tak, ostatnia funkcja w pliku js. – sbru

1

jsFiddle Working Demo

$('#inputWrapper').on('keyup', '#tags', function() { 
     if($(this).val() == "") { 
      $('button.addButton').html('Hello1'); 
     } else { 
      $('button.addButton').html('World'); 
     } 
    }); 
+0

Zaktualizowałem łącze jsFiddle. Zobacz jeszcze raz –

+0

Doceniam pomoc, ale to nie rozwiązało problemu. Jeśli ją zastąpisz, przycisk nadal będzie brzmiał "świat". – sbru

+0

Pracowałem dla mnie. +10 ☺ – Pathros

0

Funkcja ta działa tylko za pierwszym razem, bo po to jest wykonywane detektor zdarzeń jest zawsze będzie oceniana po keyup w wyniku czego pole wejściowe zawsze ma wartość. Zauważysz, że po kliknięciu przycisku, jeśli wpiszesz coś i skasujesz, naciśnięcie klawisza Backspace spowoduje powrót do Hello.

Aby uzyskać pożądane wyniki, po kliknięciu przycisku Wyślij na przycisku, ponieważ usuwasz z pola wprowadzania , możesz również tam zmienić tekst.

Patrz: http://jsfiddle.net/r4emt/37/

Właśnie dodałem:

//refreshes button name 
$(this).text('Hello'); 

do końca funkcji kliknięcia przycisku.

0

Użyj „tekst” funkcja

 $("#inputWrapper").click(function() { 
     $(this).text(function(i, v){ 
      return v === 'Hello' ? 'World' : 'Hello' 
     }) 
8

wiem, że to długi wątek martwy, ale potrzebowałem dodać to, ponieważ ja właśnie spędziliśmy 2 dni tropienia przeciek pamięci (spowodowane przeze mnie przy użyciu kod z tej strony).

WAŻNE: Nie używaj tekstu jQuerys() w elementach przycisków!

Funkcja tworzy coś w DOM, którego nie można usunąć przez empty(). Jeśli wywołasz tę funkcję wiele razy w długim okresie, duża ilość śmieci zostanie utracona w DOM, powodując uszkodzenie.

Zobacz jQuery API documentation.

(nie mogę znaleźć dokładnie tam, gdzie jej wymienione w dokumentacji, ale jest gdzieś tam, mam biec do mojego pociągu teraz) ...

+3

To nie brzmi bardzo godny zaufania, szczerze mówiąc. Jest potencjalny wyciek opisany [tutaj] (http://stackoverflow.com/a/16405533/33080), ale stwierdzenie takie jak "nie używaj tekstu()" bez wyjaśnienia jest zbyt niespecyficzne. –

Powiązane problemy