2017-07-05 1 views
2

Dies wurde zuvor gefragt, aber ich habe keine solide, funktionierende, plain JS-Lösung gefunden, alle Lösungen da draußen sind mit Frameworks oder einfach nicht funktionieren.Anzeige Wert von "Eingabebereich" in einem anderen Element gibt "undefined"

Ich möchte einfach den Wert eines Eingangs "Bereich" Werte erhalten und sie in einem Span-Element angezeigt haben.

Ich bekomme undefined ohne Fehler in der Konsole.

Hier ist der JS-Code:

document.getElementById("height").addEventListener("input", 
sliderChange(this.value)); 

function sliderChange(val) { 
document.getElementById('yourHeight').innerHTML = val; 
} 

Des Weiteren möchte ich die Benutzereingabe zu speichern und für eine andere Funktion verwenden, um die endgültigen Ergebnisse zu berechnen (diese Funktion noch nicht da ist). Hier

ist der Link:

https://codepen.io/damianocel/pen/ZyRogX

+0

Ich denke, Sie können Ihre ID = "Höhe" zu einem anderen Namen ersetzen, da Höhe ein Attribut ist. –

+0

Ich stimme zu, das war nicht die beste Konvention, es war nur ein erster Entwurf, aber es ist interessant zu sehen, dass es keine Rolle spielte o0 :-) – ptts

+0

Haha ja. Ich dachte auch das gleiche, HTML schließt diese Dinge schließlich aus :) –

Antwort

1

In diesem Code document.getElementById("height").addEventListener("input", sliderChange(this.value)), this bezieht sich auf die globale window Objekt und nicht das Eingangs , deshalb ist this.valueundefined.

Sie benötigen eine listener Callback-Funktion zum addEventListener passieren, damit es seinen eigenen Umfang haben und this auf Ihre input beziehen:

document.getElementById("height").addEventListener("input", function(){ sliderChange(this.value)}); 

Dies ist die updated working Demo ist.

+0

Vielen Dank, ich füge normalerweise immer einen Rückruf zu einem dom Level 3 Listener hinzu, das ist fast peinlich, ich habe immer geglaubt, ich könnte die Funktion direkt aufrufen , habe es nie probiert. Glauben Sie, es wäre egal. Nur als Extra, können diese Bereichs-Eingabefelder mit "target.event" behandelt werden? – ptts

+0

@ptts Ja, Sie können 'event.target' mit' function (e) {sliderChange (e.target.value)}} 'verwenden, und Sie können die Funktion immer direkt aufrufen, wenn Sie' this' nicht verwenden. –

6

Sie benötigen eine Funktion addEventListener weitergeben müssen:

document.getElementById("height").addEventListener("input", function() { sliderChange(this.value) }); 
Verwandte Themen