2017-07-05 5 views
2

これまでに質問されていましたが、実用的ではないJSソリューションを見つけました。他の要素の "入力範囲"からの表示値は "未定義"です

入力「範囲」値の値を取得し、それらをスパン要素に表示したいだけです。

コンソールでエラーなしで未定義になります。

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

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

はまた、私は(まだこの機能がない)ユーザ入力を格納し、最終結果を計算する他の機能に使用する:

ここJSコードです。

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

+0

高さは属性なので、ID = "高さ"を他の名前に置き換えることができると思います。 –

+0

私はこれがベストコンベンションではないことに同意しました。それは最初のドラフトでしたが、それは問題ではないことが分かりました:-) – ptts

+0

Haha yea。私も同じ考えをしていましたが、HTMLは結局これらのものを除外しています:) –

答えて

1

thisグローバルwindowオブジェクトではなく、入力を指し、ここで

リンクがあります、それでthis.valueundefinedです。

あなたはそれが独自のスコープを持ち、thisがあなたのinputを参照しますaddEventListenerlistenerコールバック関数を渡す必要があります:

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

これはupdated working Demoです。

+0

ありがとう、私はたいてい常にDOMレベル3のリスナーにコールバックを追加します。これはほとんど恥ずかしいです。 、それを試したことはありません。それは問題ではないと信じている。特別な場合と同様に、これらの範囲入力フィールドは "target.event"で処理できますか? – ptts

+0

@ptts 'function(e){sliderChange(e.target.value)}'を使って 'event.target'を使うことができます。' this'を使わない場合はいつでも直接関数を呼び出すことができます。 –

6

あなたはaddEventListenerに関数を渡す必要があります:

このコード document.getElementById("height").addEventListener("input", sliderChange(this.value))
document.getElementById("height").addEventListener("input", function() { sliderChange(this.value) }); 
関連する問題