2016-08-05 3 views
3

Ich habe Keydown-Ereignis auf Element.Entfernen Keydown-Ereignis von jquery Element funktioniert nicht

$("#element").keydown(function() { 
    // do stuff! 
}); 

Jetzt möchte ich es entfernen.

Ich versuchte unbind und off, aber keiner funktioniert.

$("#element").unbind("click"); 
$("#element").off("click"); 

Muss ich tun .on("click", function...) oder .bind("click", function...) statt .click wenn unbind oder off verwenden. Wenn das der Fall ist, dann ist das nicht mein Code und ich darf ihn nicht ändern, also brauche ich einen alternativen Weg.

Gibt es eine andere Möglichkeit als "unbind" oder "off", die tatsächlich funktioniert?

Danke, Hilfe sehr geschätzt !!

+0

ich vor einiger Zeit ein ähnliches Problem wie das Ihre in einem Projekt hatte. Ich glaube, ich habe den Click-Handler innerhalb einer Funktion als Callback hinzugefügt. Auf diese Weise funktionierte die Click-Funktionalität nicht mehr, wenn ich sie nicht durch eine andere Funktion aufgerufen habe. – DustinRW

+0

@DustinRW Ich verstehe nicht, was du meinst? –

+0

Was ich meine ist Ihre Funktion innerhalb einer anderen Funktion zu wickeln. Beispiel: Sie könnten Ihre Funktion _above_ in eine andere geschriebene Funktion einfügen und eine Reihe von Bedingungen erstellen. 'var outerFunction = function() {if (Bedingung erfüllt) {$ (" # element "). keydown (function() { // tue Zeug! }); }; 'Ich nehme nur an, dass Sie möchten, dass Ihre Funktion nur einmal aufgerufen wird, dann stoppt oder nur ausgeführt wird, wenn bestimmte Kriterien erfüllt sind. Hoffe, meine Idee ist klarer. – DustinRW

Antwort

1

.off(events [, selector ] [, handler ]): Version hinzugefügt: 1,7

.unbind(eventType [, handler ]): Version hinzugefügt: 1,0

Die .on() Methode misst Handler Ereignis an die aktuell ausgewählten Gruppe von Elementen in dem Objekt jQuery. Ab jQuery 1.7 bietet die .on() -Methode alle Funktionen, die zum Anhängen von Ereignishandlern erforderlich sind. Informationen zur Konvertierung von älteren jQuery-Ereignismethoden finden Sie unter .bind(), .delegate() und .live(). Informationen zum Entfernen von Ereignissen, die mit .on() gebunden sind, finden Sie unter .off(). Um ein Ereignis zu befestigen, die nur einmal ausgeführt wird und entfernt dann selbst finden .one()

Also schlage ich vor, die Aufmerksamkeit auf die jQuery-Version zu bezahlen, weil bind/unbind nicht so viel mehr verwendet.

im folgenden Ausschnitt Sie die .off() funktioniert gut sehen:

$(window).load(function() { 
 
    $("#element").keydown(function(e) { 
 
    console.log('keydown event'); 
 
    }); 
 
    $("#elementOff").click(function() { 
 
    // unbind keydown 
 
    $("#element").off('keydown'); 
 
    
 
    // attach click 
 
    $("#element").off('click').click(function(e) { 
 
     console.log('click event'); 
 
    }); 
 
    }); 
 
});
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script> 
 

 
<form> 
 
    <input id="element" type="text"> 
 
</form> 
 
<button id="elementOff">Unbind Keydown and attach Click</button>

+0

Schrieb die falsche Sache, ich habe tatsächlich "Keydown" -Ereignis, tut mir leid. –

+0

@DavidCallanan Antwort und Snippet aktualisiert. Ich hoffe, dass dies Ihr Problem lösen kann – gaetanoM

+0

@DavidCallanan könnten Sie versuchen, Ihren Code in $ (Fenster) zu verpacken .Load (Funktion() {Funktion? – gaetanoM

1

Als .click() Methode für .on ("nur eine Abkürzung ist Klicken Sie auf ", Handler), Abnehmen ist möglich mit. off ("Klick"):

$("#element").off("click", function(){ 
    $("#element").hide(); //not working 
}); 

$("#element2").on("click", function() { 
    $("#element2").hide(); //working 
}); 

Wenn Sie also eine .keydown (Handler) haben, es ist eine Abkürzung für .on ("keydown", handler) in die erste und zweite Variante, und .trigger ("keydown") in der dritten.

Die angegebenen Argumente müssen übereinstimmen, damit der Ereignishandler entfernt wird.

Wenn Sie nicht möchten, das vorhandene Skript zu berühren, oder es geändert werden kann, empfehle ich Ihnen einfach ein externes hinzufügen.js Skript der HTML-Seite, die Ereignisse um ungebundene:

<script src="your_external_script.js"></script> 

mit ähnlichem Inhalt:

$(document).ready(function(){ 
    $("#element2").unbind("click"); 
}); 
+0

Laut http://api.jquery.com/off/ ist es nicht notwendig, den Callback zu übergeben, um ihn zu entfernen. Auch ich kann mich nicht erinnern, wo ich es gelesen habe, aber es sagte, dass Sie keine anonyme Funktion als Callback-Parameter übergeben können. Dies ist auch externer Code von meinem Freund, der sich in der Zukunft ändern kann (und anonyme Funktionen verwendet), also wie würde ich es in dieser Situation tun? –

+0

ja, sicher. Ich habe nur ein Beispiel gezeigt, wie "Ein" und "Aus" sich im selben Kontext verhalten. um es zu deaktivieren, können Sie einfach '("#element"). off ("click");'. Ich habe gerade versucht, das externe Skript zu verwenden und es löst das Ereignis erfolgreich auf, also lass mich meine Antwort aktualisieren :) – krankuba

Verwandte Themen