2009-04-30 16 views
28

Jak powiązać zdarzenie OnChange z TextBox do funkcji za pomocą jQuery?Jak powiązać zdarzenie onchange w TextBox za pomocą JQuery?

staram to i jego rygorem:

$(document).ready(function() { 
    $("input#tags").bind("change",autoFill); 
}); 

function autoFill() { 
    $("#tags").autocomplete("/taglookup/", { 
     width: 320, 
     max: 4, 
     highlight: false, 
     multiple: true, 
     multipleSeparator:",", 
     scroll: true, 
     scrollHeight: 300, 
     delay: 10 
    }); 
} 

NB:. Chcę zaimplementować TextBox Tag jak ten na stackoverflow, który wykrywa zdarzenia onChange i wywołuje funkcje AJAX, gdy użytkownik wpisze w

+1

Co dokładnie kończy się niepowodzeniem? Czy autouzupełnianie nie zostało wywołane, czy jest to coś innego? – kgiannakakis

+0

Dla pola tekstowego z funkcją autouzupełniania jest prawdopodobnie lepsze zdarzenie onkeyup. – Eddy

+0

@Eddy, dlaczego tak jest? Czy nie lepiej byłoby wysłać prośbę AJAX o jak najszybciej? –

Odpowiedz

31

szukasz keydown/prasa/up

$("#inputID").keydown(function(event) { 
    alert(event.keyCode); 
}); 

lub za pomocą wiązania $ ("# inputID"). powiązać ('onKeyDown', ...

http://docs.jquery.com/Events

+1

Zauważyłem, że używanie 'keydown' oznaczało, że mój handler uruchamiałby pewne dziwne naciśnięcia klawiszy, takie jak ALT + TAB. –

+3

Klawisz * działa tylko przy naciskaniu klawiszy. Jeśli wkleisz coś w polu tekstowym za pomocą menu kontekstowego myszy, nie zostanie ono uruchomione. Używanie zdarzenia onchange jest zwykle drogą do zrobienia. –

+1

@ ingredient_15939, dlatego moja odpowiedź wyraźnie wspomina "Jeśli szukasz KEYdown/naciśnij/up", nie mówiąc o wydarzeniach myszy –

1

I Odpowiedź drugiego Chada Granta, a także przesłanie tego artykułu na blogu [usunięto niedziałający link] dla przyjemności oglądania.

+0

Ten link (http://themaingate.net/dev/javascript/jquerys-annoying- zmiany w zachowaniu-do-zmiany) wydaje się być martwy. –

+0

ONOZ. Nienawidzę tego, kiedy to się dzieje. Usuwam link. :( – vitaminjeff

18

Musisz zmienić nazwę wydarzenia z „zmiany” na „onchange”:

$(document).ready(function(){ 
     $("input#tags").bind("onchange", autoFill); 
      }); 

lub użyj zmianę metody spoiwo skrót:

$(document).ready(function(){ 
     $("input#tags").change(autoFill); 
      }); 

Należy zauważyć, że zdarzenie onchange zazwyczaj odpala gdy użytkownik opuszcza wejście, więc do automatycznego uzupełniania lepiej wykorzystaj zdarzenie keydown.

0

jeśli próbujesz użyć jQuery aut z pluginem, to myślę, że nie musisz wiązać się z zdarzeniem onChange, będzie to

1

Co mówi Chad, z wyjątkiem lepszego użycia .keyup w tym przypadku, ponieważ z .keydown i .keypress wartość wejścia jest nadal starsza wartość, tj. naciśnięty naj- nowszy klawisz, nie zostanie odzwierciedlony, jeśli wywołany zostanie .val().

To prawdopodobnie powinien być komentarz do odpowiedzi Chada, ale nie mam jeszcze uprawnień do komentowania.

Powiązane problemy