Korzystając z jQuery, chciałbym uruchomić funkcję, gdy są podniesione .change()
lub .keyup()
.
Coś takiego.
if ( jQuery(':input').change() || jQuery(':input').keyup() )
{
alert( 'something happened!' );
}
EDYTOWAĆ
Przepraszam, zapomniałem wspomnieć. Oba .change()
i .keyup()
wymagają, aby niektóre zmienne znajdowały się w zakresie.
javascript
jquery
function
cnotethegr8
źródło
źródło
need some of the variables to be in-scope
masz na myśli zmienne ze zdarzenia lub zmienne, których używasz podczas rejestrowania tych programów obsługi zdarzeń? Otrzymujesz zmienne zdarzenia w parametrze zdarzenia (zwykle nazywanyme
), w przeciwnym razie możesz potrzebować zachować je na poziomie okna lub danych w elemencie do momentu wywołania zdarzeń lub spojrzeć na zamknięcia.Odpowiedzi:
możesz powiązać wiele wydarzeń, oddzielając je spacjami:
$(":input").on("keyup change", function(e) { // do stuff! })
dokumenty tutaj .
mam nadzieję, że to pomoże. Twoje zdrowie!
źródło
Jeśli kiedykolwiek dynamicznie generujesz zawartość strony lub ładujesz zawartość przez AJAX, następujący przykład jest naprawdę właściwy:
body
dokumencie, więc niezależnie od tego, jakie elementy są dodawane, przenoszone, usuwane i ponownie dodawane, wszystkie elementy potomnebody
pasujące do określonego selektora zachowają właściwe powiązanie.Kod:
// Define the element we wish to bind to. var bind_to = ':input'; // Prevent double-binding. $(document.body).off('change', bind_to); // Bind the event to all body descendants matching the "bind_to" selector. $(document.body).on('change keyup', bind_to, function(event) { alert('something happened!'); });
Proszę zauważyć! Używam
$.on()
i$.off()
zamiast innych metod z kilku powodów:$.live()
i$.die()
są przestarzałe i zostały pominięte w nowszych wersjach jQuery.$.change()
i$.keyup()
osobno, albo przekazać tę samą deklarację funkcji do każdej wywoływanej funkcji; Powielanie logiki ... Co jest absolutnie niedopuszczalne.$.bind()
nie wiąże się dynamicznie z elementami podczas ich tworzenia. Dlatego jeśli połączysz się z,:input
a następnie dodasz wejście do DOM, ta metoda wiązania nie zostanie dołączona do nowego wejścia. Następnie musiałbyś jawnie cofnąć wiązanie, a następnie ponownie związać się ze wszystkimi elementami w DOM (w przeciwnym razie wiązania zostaną zduplikowane). Ten proces musiałby być powtarzany za każdym razem, gdy dane wejściowe były dodawane do DOM.źródło
var bind_to = ':input';
tworzy zmienną o nazwiebind_to
, która jest selektor, aby pobrać wszystkie typy wejściowych, takich jakinput
,textarea
ibutton
.var bind_to = '#myInput';
i tak wywołanie Ajax wykonuje się dwukrotnie. Czemu???Zrób to.
$(function(){ var myFunction = function() { alert("myFunction called"); } jQuery(':input').change(myFunction).keyup(myFunction); });
źródło
change()
ikeyup()
zwróć zapakowany zestaw, aby móc go połączyć.Możesz zapisać się na wydarzenia change i keyup:
$(function() { $(':input').change(myFunction).keyup(myFunction); });
gdzie
myFunction
jest funkcja, którą chcesz wykonać:function myFunction() { alert( 'something happened!' ); }
źródło
Nie tak działają wydarzenia. Zamiast tego dajesz im funkcję, która ma być wywołana, gdy się pojawią.
$("input").change(function() { alert("Something happened!"); });
źródło
Napisz jedną funkcję i wywołaj ją dla obu.
function yourHandler(e){ alert( 'something happened!' ); } jQuery(':input').change(yourHandler).keyup(yourHandler);
Funkcje rejestracji zdarzeń change () i keyup () zwracają oryginalny zestaw, dzięki czemu można je połączyć w łańcuch.
źródło
wejście zdarzenia keyup jQuery
Do wersji demonstracyjnej
$(document).ready(function(){ $("#tutsmake").keydown(function(){ $("#tutsmake").css("background-color", "green"); }); $("#tutsmake").keyup(function(){ $("#tutsmake").css("background-color", "yellow"); }); });
<!DOCTYPE html> <html> <title> jQuery keyup Event Example </title> <head> <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> </head> <body> Fill the Input Box: <input type="text" id="tutsmake"> </body> </html>
źródło