以下のコードでは、最終的な 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() を使用する必要がありますか?