2017-04-15 2 views
0

Es gibt einen Eingabetext, der eine Funktion beim "onkeyup" -Ereignis auslöst. Wenn diese Funktion ausgelöst wird, binde ich ein "keyup" -Ereignis mit der Methode .on ("keyup"), um die letzte gedrückte Taste zu erhalten, um herauszufinden, ob sie alphanumerisch war, um den gewünschten Such-Ajax auszulösen. Und nachdem ich fertig bin, entbinde ich die Verbindung mit der .off ("keyup") Methode.JavaScript .on ("keyup")

Aber es gibt ein Problem mit der Entbinderung. Das Problem ist; Mein Code läuft einmal und läuft nicht für eine Runde, läuft dann wieder und läuft nicht für die andere Runde und hält es so weiter. Ich habe den Code ersetzt, den ich zum Testen vereinfachen möchte.

$("#arama").on("keyup",function(event) { 
 
     console.log("asd"); 
 
     $("#arama").off("keyup"); 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input id="arama" />

Wo bin ich falsch?

P.S: Ich habe es dank Chris gelöst.

Antwort

0

Ihr Code funktioniert für mich (siehe unten). Vielleicht überprüfen Sie, wo Sie Ihre keyup Veranstaltung verbindlich sind. Es sollte einmal gebunden werden, wenn das Dokument geladen wird, bevor die Seite angezeigt wird. Wenn Sie es mehrfach binden (d. H. Wenn der Code, der Ihre keyup-Funktion enthält, mehrmals ausgeführt wird), treten Probleme auf.

$("#arama").on("keyup", function(event) { 
 
    var i = event.keyCode; 
 
    if ((i >= 48 && i <= 57) || (i >= 96 && i <= 105)) { 
 
    $("#arama").off("keyup"); 
 
    console.log("Number pressed. Stopping..."); 
 
    } else { 
 
    console.log("Non-number pressed."); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<input id="arama" />

+0

Ganz seltsam, läuft Ihr Code das Protokoll für einmal, obwohl ich mehrmals geschrieben habe http://i.hizliresim.com/JazolQ.png –

+0

Das ist, weil es das 'keyup' Ereignis ist freibleibend nachdem es einmal gefeuert hat. Sie können eine Bedingung für den Befehl '.off (" keyup ")' festlegen, um zu steuern, wann die Ausführung der übergeordneten Funktion gestoppt wird. –

+0

Es scheint, als hättest du mich falsch verstanden. Siehe diese 2 Bilder http://i.hizliresim.com/nRN8da.png http://i.hizliresim.com/GB48Av.png Auf dem ersten Bild habe ich 3 Zeichen geschrieben und es hat nicht das 3. Zeichen, On das zweite Bild, das ich 4 Zeichen geschrieben habe und da es sich jedes Mal zweimal anmeldet Es loggte 3. und 4. Zeichen gleichzeitig. Und ich suche, ob es alphanumerisch nicht nur numerisch ist Es ist sicher zu sein, dass es nicht ctrl, alt oder smth ist. –

0

Keine Notwendigkeit, um das Ereignis zu entbinden. Versuchen Sie, diese

$("#arama").on("keyup",function(event) { 
    console.log("asd"); 
}); 
+0

Ich muss es tatsächlich lösen, da ich es mehrfach deklariere, wenn die Elternfunktion jedes Mal ausgelöst wird, wenn ich eine Taste auf dem Eingabetext drücke. Wenn ich es nicht entbinde, wird es immer wieder binden und den Code mehrere Male auslösen. –

+0

können Sie Ihren vollständigen Code teilen? –