6

入力があり、メソッドtype = "number"を設定しました。onChange

入力のデフォルト値は 0 です。

次に、プログラムで値を 10 に変更します。

ここで、値を手動で 0 に再度変更します。

メソッドは、onChange手動で行われた変更では呼び出されません。これは、プログラムで値を 10 に変更したときにイベントが呼び出されなかったことが原因だと思います。つまり、ある意味では、コントロールは値がまだ 0 であると考えています。

これは、手動で値をプログラムによる変更前の値に設定した場合にのみ発生します。他の値を使用して手動で変更すると、onChangeイベントは正しくトリガーされます。

4

2 に答える 2

5

フォーム コントロールの値をプログラムで変更しても、その変更ハンドラーがトリガーされません。おそらく、ユーザーが値を変更し、コントロールがフォーカスを失った後に変更イベントが発生するように指定されているためです。プログラムによる変更は、その順序に従わなかった (プログラムによる変更イベントを要素にディスパッチすることはできたが、ユーザー アクションを模倣するためにプログラムでフォーカスとぼかしを設定することは役に立たなかった)。

HTML5 では、入力がユーザー入力を受け取るたびに発生する新しい入力イベントが導入されました。

<input id="i0" oninput="alert(this.value);" value="">

onchange の代わりにそれを使用することもできますが、キーを押すたびに、またテキストが入力に貼り付けられたりドラッグされたりした場合にも発生します。

ただし、HTML5 を完全にサポートするブラウザーはありません (また、HTML5 は移動するターゲットであるため、おそらく今後もサポートされません)。そのため、入力イベントがサポートされていない場合は、機能テストとフォールバック メカニズムを提供する必要があります。

于 2012-06-13T02:34:13.463 に答える