2016-06-09 11 views
0

So versuche ich, meine addEventListener-Funktion mithilfe der removeEventListener-Funktion zu entfernen. Ich habe viel darüber gelesen, dass ich eine Handler-Funktion einbauen muss, was ich getan habe.RemoveEventListener ohne laufende Funktion

Eines der Probleme ist, dass ich darauf bin, dass ich den Eventlistener entfernen möchte, wenn ich eine Eingabe mit googles Suchfeld ändere. Es macht nichts, Google aber wirklich alles, was passiert, ist es zu identifizieren, wenn der Eingabewert geändert hat und neue Ergebnisse liefert. So ein Stück Code

var input = document.getElementById('search-input'); 
var searchBox = new google.maps.places.SearchBox(input); 
google.maps.event.addListener(searchBox, 'places_changed', locationChange); 

function previousButtonFunction(){ 
    //Does something here and does not return anything. Lets just say it places markers all over the map 
} 

function locationChange() { 
    var previousButton = document.getElementById('previous'); 
    previousButton.removeEventListener('click', previousButtonFunction()); 
    previousButton.addEventListener('click', function() { previousButtonFunction()}) 
}; 

Also dieser Code sieht aus wie es keinen Sinn für Sie wahrscheinlich nicht machen, aber was ich versuche zu bekommen, dass auf dem ersten Eingang wäre es den Add-Ereignis-Listener ausgeführt und Führen Sie die removeEventListener-Funktion nicht aus. Sobald sich der Wert der Eingabe geändert hat, möchte ich den aktuellen Listener entfernen und die vorherige Schaltfläche mit einem neuen addeventlistener neu identifizieren.

Auf den ersten gehen, merke ich, dass die Funktion von previousButtonFunction() ausgeführt wird, die ich dachte, dass es nur ausgeführt würde, wenn es einen identifizierten Listener gäbe. Die erste Frage ist also die Funktion removeEventListener, die ausgeführt werden soll, wenn der Eventlistener nicht hinzugefügt wurde? Zweitens, wie kann ich den addEventListener entfernen, ohne die Funktion auszuführen? Müsste ich eine Tracking-ID wie true eingeben => run it/false => nicht ausführen?

Dank jede Hilfe sehr geschätzt

nicht () nach dem Funktionsnamen ist

Antwort

1

Verwenden. Sie möchten nur einen Verweis auf die Funktion übergeben. Putting () nach dem Namen ruft die Funktion und übergab den Rückgabewert. Dies ist ein sehr häufiger Fehler. diese

Wechsel:

previousButton.removeEventListener('click', previousButtonFunction()); 

dazu:

previousButton.removeEventListener('click', previousButtonFunction); 

Das gleiche gilt für .addEventListener(). Fügen Sie () nach dem Funktionsnamen nicht ein, es sei denn, die Funktion gibt eine andere Funktion zurück, die Sie als Listener verwenden möchten.

FYI, es ist ein wenig unklar, warum Sie versuchen, zu entfernen und dann wieder genau die gleiche Listener-Funktion hinzuzufügen. Wenn sich an diesem Objekt nicht mehrere Listener befinden und Sie versuchen, die Reihenfolge der Listener zu ändern, handelt es sich im Wesentlichen um einen Noop.

+0

Also für den addEventListener könnte ich einfach .addEventListener ('click', previousButtonFunction)? –

+0

@JuliusDoan - Ja, das wird gut funktionieren. Wenn nur der Funktionsname verwendet wird, wird ein Verweis auf die Funktion übergeben, die '.addEventListener()' und '.removeEventListener()' erwarten. – jfriend00

+0

Oh wow, naja, der erste Teil, der das() löscht, funktioniert perfekt für den removeEventListener. In Bezug auf den addEventListener() hat es nicht so viel funktioniert. Ich habe es als Funktion() {previousButtonFunction (parameters)} behalten und es hat funktioniert. –

Verwandte Themen