0

以下のコードでは、最終的な alert() で新しい値を取得するのに、フォームの送信時 (および firebug で非表示フィールドを表示するとき) に古い値を取得するのはなぜですか?

フォームタグ内の隠しフィールド要素:

<input type="hidden" id="shipping_1" name="shipping_1" value="3.99">

ShipTo ドロップダウンが選択されると、jQuery を使用してフィールド値が更新されます。

$('#ShipSelect').change(function(e) {
    var ss = $('#ShipSelect').val();
    if (ss=='International') {
        alert("International orders add $10 S&H");
        ship1 = ($('#shipping_1').val())*1 + 10;
        alert('Shipping_1 val is now: ' + ship1);
        $('#shipping_1').val(ship1);
        alert('Reading the field directly: ' + $('#shipping_1').val());
    }
});

アラートは、$10 が非表示フィールドの値に追加されたことを示しています。ここまでは順調ですね。

ただし、DOM が Firebug (または Chrome DevTools モード) で表示されている場合、および/または[今すぐ購入] ボタンが押された場合、shipping_1フィールドは古い値 ($10 ショート) になります。


更新:私の問題を正確に説明しているこの有望な投稿を見ましたが、解決策は機能しませんでした。これは彼らが提案したものです:

document.form_name.field_name.value = your_value

したがって、次の行をコメントアウトしました。

$('#shipping_1').val(ship1);

そしてそれを次のように置き換えました:

document.paypal_cart.shipping_1.value = ship1;

結果は今と変わらない。古い値は引き続き送信されます (firebug で表示すると表示されます)。変更された値をフォームなどに「修正」するために、何らかの形で .on() を使用する必要がありますか?

4

1 に答える 1

0

http://jsfiddle.net/PeT66/1/

少し簡略化されています。閉じ括弧を見逃したと思います

$('#ShipSelect').change(function(e) {
    var ss = $('#ShipSelect').val();
    alert("International orders add $10 S&H");
    ship1 = ($('#shipping_1').val())*1 + 10;
    alert('Shipping_1 val is now: ' + ship1);
    $('#shipping_1').val(ship1);
    alert('Reading the field directly: ' + $('#shipping_1').val());
});
于 2013-03-22T20:24:01.317 に答える