javascript - プログラムでテキストボックスの値を変更するとIE8が変更イベントを起動する

javascript jquery internet-explorer-8

IE8のJavaScriptの問題が発生しています(喜び)。

基本的に、特定のテキストボックスの負の数のエントリを正の値に変換する必要があります。私はこのようにすると思います:

$('input[type="text"]').live('change', function () {
    var number = $(this).val();
    if (number < 0)
    {
        $(this).val(-number);
    }
});


後でテキストボックスのフォーカスが失われたときに何かをします:

$('input[type="text"]').live('blur', function () {
    // do stuff with textbox's _positive_ number
})


IE8では、テキストボックスの値が変更されると(つまり、テキストボックスに-23と入力すると)、残念ながらchangeイベントが2回発生し、blurイベントはまったく発生しません。

他の最新のブラウザはこれを行いません。


変更イベントが2回発生するのはなぜですか?
ぼかしイベントが発生しないのはなぜですか?
どうすれば修正できますか?


この状況を確認するには、ここにアクセスしてください:http://jsfiddle.net/ajbeaven/AwZKM/
答え
フォーム要素のvalueプロパティを別の値に設定すると、IE8でchangeイベントが発生するため、この行は

$(this).val(-number);


変更イベントを再度トリガーします。コードを次のように変更した場合、blurイベントが発生しないというもう1つの問題

$('input[type="text"]').change( function () {
    var number = $(this).val();
    if (number < 0)
    {
        $(this).val(-number);
    }
    alert('change');

});

$('input[type="text"]').blur(function () {
    alert('blur');
})


これはうまくいき、changeとblurイベントが.liveでバインドされているときに何かが起こっていると思います。申し訳ありませんが、解決策の詳細はあまりわかりません。多分誰かがこれを読んだ後でいくつかのアイデアを思いつくかもしれません。
関連記事

javascript - JCropがJavaScriptコードで機能しない

javascript - NodeJS用のRDF / XML JavaScriptコンバーターへのN-triples

javascript - javascript関数がオブジェクトの場合、なぜこれが機能しないのですか

javascript - ステートメントとImg問題について

javascript - node.jsのhttp.requestからブラウザに応答を送信する方法は?

javascript - FacebookのJS SDKから「アクション」で壁に投稿する方法

javascript - JavaScriptで画像を回転しているときの奇妙な配置の問題

javascript - ブラウザのブレットグラフ-d3.jsの代替? (ブラウザのサポートが良好)[終了]

javascript - jsを使用してテキストボックスのサイズを動的に設定する

javascript - JavaScriptの正規表現でキャプチャグループのインデックスを取得するにはどうすればよいですか?