数値入力要素を持つ単純な HTML5 ページがあります。この要素から onchange (または onclick) イベントをキャッチしようとしていますが、いくつかの困難な動作に気付きました。埋め込まれた JavaScript で、initialize() 関数を window.onload イベントにアタッチします。この initialize() 関数内で、キャンバスにさまざまなものをペイントし (以下のサンプルではわかりやすくするために削除しています)、数値入力にイベント リスナーも追加します。initialize() 関数が実行されている間、イベントは機能しているように見えます。ただし、関数が完了すると、イベントはキャプチャされなくなります。これは、ある種のスコーピングの問題のようです??? イベントリスナーが割り当てられた関数の外に出ると、イベントリスナーはリッスンしなくなります。おそらく説明がかなり下手です。以下のコードは、説明されている動作を示しています (Chrome でのみテスト済み)。私' ページが表示されている限り、イベントリスナーが機能することを望みます。確かにこれは可能です。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="description" content="">
<meta name="keywords" content="">
<script type="text/javascript">
var Div1;
var Canvas1;
var Spinner1;
var Context1;
function initialize()
{
// body
document.body = document.createElement('body');
// Div
Div1 = document.createElement('div');
document.body.appendChild(Div1);
// canvas
Canvas1 = document.createElement('canvas');
Div1.appendChild(Canvas1);
// Input Number
Spinner1 = document.createElement('input');
Spinner1.setAttribute('type','number');
Spinner1.setAttribute('min',"0");
Spinner1.setAttribute('max',"50");
Spinner1.setAttribute('value',"2");
Div1.appendChild(Spinner1);
// Event Handlers
Spinner1.addEventListener("onchange",SpinnerValue_Changed(),false);
// contexts
Context1 = Canvas1.getContext("2d");
function SpinnerValue_Changed()
{
window.alert("event captured");
}
}; // END initialize()
window.onload=initialize();
</script>
</head>
<body>
</body>
</html>