2016-10-12 4 views
-2

Ich habe ein Problem, wenn onChange Zuhörer für die Eingabe in JavaScript zu machen versucht:JavaScript onChange funktioniert nicht mit DOM-Elemente

var apple = document.getElementById("apple"); 
apple.addEventListener("change", validate("apple")); 

function validate(fruitName){ 
    var qty = parseInt(document.getElementById(fruitName).value); 
    console.log(qty); 
} 

Ich versuche, jedes Mal, wenn die Benutzereingabe etwas für ‚Apfel‘ Eingang zu überprüfen, I wird die Menge an der Konsole ausgeben. Aber dadurch, lief es nur das erste Mal, als ich den Browser durch Drucken eines NaN auffrischte und nicht funktioniert, selbst wenn ich die Eingabe für "Apfel" änderte.

Irgendwelche Ideen?

Vielen Dank im Voraus.

+1

Nun, Sie geben keine Funktion zurück, die beim Änderungsereignis aufgerufen wird – Maxx

+0

'undefined' ist kein Ereignis-Listener. – Oriol

Antwort

7

Sie haben die Funktion zu verweisen, ist es nicht nennen, und Sie müssen nicht im Namen passieren als ID zu verwenden, um die Elemente zu bekommen, ist das Element bereits in this

var apple = document.getElementById("apple"); 

apple.addEventListener("change", validate); 

function validate(event){ 
    var qty = parseInt(this.value, 10); 
    console.log(qty); 
} 

Wenn Sie Klammern hinzufügen, rufen Sie die Funktion auf und alles, was zurückgegeben wird, wird an den Ereignishandler übergeben.
Da Funktionen undefined standardmäßig zurückgeben, erhalten Sie das.

+0

Sorry, aber ich versuche zu versuchen, die Zeichenfolge, die der fruitName ist, an die validate() sowie – hyperfkcb

+1

übergeben Da dies auch die ID ist, erhalten Sie diesen Namen mit 'this.id', aber es macht keinen Sinn zu tun 'document.getElementById (this.id)', da es nur das gleiche wie 'This' zurückgibt. – adeneo

+0

Tut mir leid, aber was ich versuche zu tun, ist, dass ich tatsächlich ein paar Früchte habe. Dann, wenn ich die Validierung anrufe, wollte ich den Namen der Frucht genauso gut weitergeben wie sie irgendwo anders im Code verwendet wird. Der var apple ist eigentlich die Menge, Entschuldigung für die Namenskonvention – hyperfkcb

Verwandte Themen