Próbuję wywołać change
zdarzenie w polu tekstowym, gdy zmieniam jego wartość za pomocą przycisku, ale nie działa. Sprawdź to skrzypce .
Jeśli wpiszesz coś w polach tekstowych i klikniesz gdzie indziej, change
uruchomi się. Jednak po kliknięciu przycisku wartość pola tekstowego zostanie zmieniona, ale change
nie zostanie uruchomiona. Dlaczego?
Odpowiedzi:
onchange
uruchamia się tylko wtedy, gdy użytkownik wpisze dane wejściowe, a następnie dane wejściowe tracą ostrość.Możesz ręcznie wywołać
onchange
zdarzenie po ustawieniu wartości:Alternatywnie możesz uruchomić zdarzenie, używając:
źródło
.change()
z.val()
metodą..val()
się.change()
bo robią walidacji wejścia. Wyzwalanie.change()
na.val()
spowodowałaby nieskończoną pętlę.blur
do osiągnięcia czegoś podobnego:$('#mytext').focus().val('New text').blur();
Z doskonałej sugestii redsquare działa to ładnie:
źródło
this
return this.val(v).trigger("change");
Możesz bardzo łatwo zastąpić
val
funkcję, aby wywołać zmianę, zastępując ją proxy do pierwotnejval
funkcji.po prostu dodaj ten kod gdzieś w swoim dokumencie (po załadowaniu jQuery)
Działający przykład: tutaj
(Zauważ, że to zawsze zadziała,
change
gdyval(new_val)
zostanie wywołane, nawet jeśli wartość nie uległa zmianie).Jeśli chcesz wywołać zmianę TYLKO wtedy, gdy wartość faktycznie się zmieniła, użyj tego:
Przykład na żywo: http://jsfiddle.net/5fSmx/1/
źródło
.val()
..val()
myślą o prawidłowej definicji , nagle zacząłby wywoływać skutki uboczne :-p.Musisz połączyć metodę w następujący sposób:
źródło
Nie, może być konieczne ręczne uruchomienie po ustawieniu wartości:
lub:
źródło
Wygląda na to, że wydarzenia się nie burzą. Spróbuj tego:
Mam nadzieję, że to pomoże.
Próbowałem tylko zwykłego starego
$("#mytext").trigger('change')
bez zapisywania starej wartości, a.change
pożary nawet, jeśli wartość się nie zmieniła. Dlatego zapisałem poprzednią wartość i zadzwoniłem$("#mytext").trigger('change')
tylko wtedy, gdy się zmieni.źródło
Od lutego 2019 r.
.addEventListener()
Obecnie nie działa z jQuery.trigger()
lub.change()
możesz przetestować go poniżej za pomocą Chrome lub Firefox.musisz użyć
.dispatchEvent()
zamiast tego.źródło
Od https://api.jquery.com/change/ :
change
Zdarzenie jest przesyłane do elementu, gdy jego wartość zmienia. To wydarzenie jest ograniczone do<input>
elementów,<textarea>
pól i<select>
elementów. W przypadku pól wyboru, pól wyboru i przycisków opcji zdarzenie jest uruchamiane natychmiast, gdy użytkownik dokonuje wyboru za pomocą myszy, ale w przypadku innych typów elementów zdarzenie jest odraczane do momentu, gdy element straci fokus.źródło
Wiem, że to stary wątek, ale dla innych, którzy szukają, powyższe rozwiązania mogą nie być tak dobre, jak poniższe, zamiast sprawdzania
change
zdarzeń, sprawdzaniainput
zdarzeń.źródło