Mit jQuery möchte ich eine Funktion ausführen, wenn entweder .change()
oder .keyup()
ausgelöst wird.
Etwas wie das.
if ( jQuery(':input').change() || jQuery(':input').keyup() )
{
alert( 'something happened!' );
}
BEARBEITEN
Entschuldigung, ich habe vergessen zu erwähnen. Beides .change()
und .keyup()
einige der Variablen müssen im Gültigkeitsbereich sein.
javascript
jquery
function
cnotethegr8
quelle
quelle
need some of the variables to be in-scope
Meinen Sie Variablen aus dem Ereignis oder Variablen, die Sie beim Registrieren dieser Ereignishandler verwenden? Sie erhalten die Ereignisvariablen im Ereignisparameter (normalerweise benannte
), andernfalls müssen Sie sie möglicherweise auf Fensterebene oder auf Daten des Elements halten, bis die Ereignisse ausgelöst werden, oder sich die Abschlüsse ansehen.Antworten:
Sie können an mehrere Ereignisse binden, indem Sie sie durch ein Leerzeichen trennen:
$(":input").on("keyup change", function(e) { // do stuff! })
Dokumente hier .
hoffentlich hilft das. Prost!
quelle
Wenn Sie jemals dynamisch Seiteninhalte generieren oder Inhalte über AJAX laden, ist das folgende Beispiel genau das Richtige für Sie:
body
Dokument. Unabhängig davon, welche Elemente hinzugefügt, verschoben, entfernt und erneut hinzugefügt werden,body
behalten alle Nachkommen, die mit dem angegebenen Selektor übereinstimmen, die ordnungsgemäße Bindung bei.Der Code:
// 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!'); });
Bitte beachten Sie! Ich benutze aus mehreren Gründen
$.on()
und$.off()
nicht andere Methoden:$.live()
und$.die()
sind veraltet und wurden in neueren Versionen von jQuery weggelassen.$.change()
und$.keyup()
separat übergeben oder dieselbe Funktionsdeklaration an jede aufgerufene Funktion übergeben. Logik duplizieren ... Was absolut inakzeptabel ist.$.bind()
nicht dynamisch an Elemente gebunden. Wenn Sie:input
an das DOM binden und dann eine Eingabe hinzufügen, wird diese Bindemethode daher nicht an die neue Eingabe angehängt. Sie müssten dann die Bindung explizit aufheben und dann erneut an alle Elemente im DOM binden (andernfalls werden Bindungen dupliziert). Dieser Vorgang müsste jedes Mal wiederholt werden, wenn eine Eingabe zum DOM hinzugefügt wurde.quelle
var bind_to = ':input';
wird eine Variable bezeichnet ,bind_to
die ein Selektor ist , alle Eingangstypen zu greifen, wie zum Beispielinput
, ,textarea
undbutton
.var bind_to = '#myInput';
Der Ajax-Aufruf wird ohnehin zweimal ausgeführt. Warum???Mach das.
$(function(){ var myFunction = function() { alert("myFunction called"); } jQuery(':input').change(myFunction).keyup(myFunction); });
quelle
change()
undkeyup()
geben Sie das verpackte Set zurück, damit Sie es verketten können.Sie können die Änderungs- und Keyup-Ereignisse abonnieren:
$(function() { $(':input').change(myFunction).keyup(myFunction); });
Wo
myFunction
ist die Funktion, die Sie ausführen möchten:function myFunction() { alert( 'something happened!' ); }
quelle
So funktionieren Ereignisse nicht. Stattdessen geben Sie ihnen eine Funktion, die aufgerufen werden soll, wenn sie auftreten.
$("input").change(function() { alert("Something happened!"); });
quelle
Schreiben Sie eine einzelne Funktion und rufen Sie sie für beide auf.
function yourHandler(e){ alert( 'something happened!' ); } jQuery(':input').change(yourHandler).keyup(yourHandler);
Die Ereignisregistrierungsfunktionen change () und keyup () geben den ursprünglichen Satz zurück, sodass sie verkettet werden können.
quelle
Eingabe von Keyup-Ereigniseingaben
Für die Demo
$(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>
quelle