1

jQuery を使用してページ要素を変更していますが、コードは (正常に) 実行されているように見えますが、ページは実際にはすぐには更新されません。Chrome ではすべてが安定していますが、IE9 はおかしくなっています。

JavaScript:

$(document).ready(function() {
    $('body').on('change', '.Hours', function () {
        var hoursElement = this;
        this.value = Math.ceil(this.value * 4) / 4;
        $.post("/Log/UpdateWorkItemHours", { 
        //valid arguments
        }, function (hours) { 
            hoursElement.value = hours;
            updateSum(); 
        });
    });
});

function updateSum() {
    var sum = 0;
    $('.Hours').each(function () {
        sum += parseFloat($(this).val());
    });
    $('#sum').text("Total Hours: " + sum);
    alert(sum);
}

HTML:

<input type="text" class="numeric Hours" value="4"   />
<input type="text" class="numeric Hours" value="4"   />
<input type="text" class="numeric Hours" value="21"   />

<span class="numeric" id="sum">Total Hours: 0</span>

#sum の内容を変更する必要がある後 (コード内) にアラートが発生し、正しい数値が表示されますが、ページをランダムにクリックするか、タブを使用してフォーカスを数回変更するまで、ページは更新されません。また、アラートはデバッグ専用です。これは、そこに追加する前に発生していました。

コードの順序: 1. 合計を計算する 2. ページを更新する 3. アラート ポップアップを作成する

実行の順序: 1. 合計を計算する 2. アラート ポップアップを作成する 3. ユーザーがランダムにクリックするまで待つ 4. ページを更新する

何か案は?

編集: HTML と関数を呼び出すイベントを追加しました。

4

3 に答える 3

2

コールバック関数のタイミングにあるようです。その部分を取り除くと、すべてが IE で期待どおりに機能します。

$('body').on('change', '.Hours', function () {
    this.value = Math.ceil(this.value * 4) / 4;
    updateSum();
});

投稿は、問題を特定するのに役立つように、一緒に追加される入力を作成している可能性が高いことに気付きました.

于 2012-04-18T21:58:01.097 に答える
0

IDがsumの要素が複数ありますか?IEが別のものを選択している間(またはまったく選択していない場合)、Chromeが最初のものを選択している可能性があります。

Webセキュリティの本を掘り下げる必要がありますが、それらがその状況を異なる方法で処理することを読んだことを覚えています。

編集:

提供したコード(もちろんAJAX呼び出しを除く)を使用してChromeとIE7-9でこのjsFiddleをテストしたところ、正常に動作します。

そのため、IEでAJAX呼び出しが失敗するか(可能性は低い)、構文エラーが表示されません。

于 2012-04-18T21:37:33.257 に答える
0

ラインを変えてみる

this.value = Math.ceil(this.value * 4) / 4;

$(this).val(Math.ceil($(this).val() * 4) / 4;)
于 2012-04-18T21:58:31.483 に答える