基本的に次のようなコードがあります
.on("keyup", "input", function (e) {
this.value = utils.formatNumber(this.value);
})
.on("change", "input", function(e) {
expensiveFunctionThatUpdatesView();
})
そのままでは、値はユーザーが入力すると正しくフォーマットされますが、ユーザーが入力フィールドからタブを移動したりクリックしたりすると、onChange イベントはトリガーされません (したがって、ビューは更新されません)。keyup イベント ハンドラー関数の本文をコメント アウトすると、すべてが意図したとおりに機能します (書式設定を除く)。これはなぜですか?
私の知る限り、onchange イベントがトリガーされるために満たす必要がある2つの条件があります。
- onfocus イベントをトリガーした何かによってコントロール/入力フィールドに入力されたに違いありません (古い値を保存します)。
- フォーカス時に存在していた値は、「exit」/blur に存在する値とは異なります
ところで、コードを「ぼかし」に変更しようとしましたが、フィールドをフォーマットしてもトリガーされません。これをテストするときに Chrome を使用します。