2017-11-28 9 views
1

私はいくつかの要因に基づいて必要な輸送サービスの数を計算する予約を行うための複数ページのフォームを持っています。あなたは最初にいくつかの乗客を選択します( '#input_2_6')。あなたが選択する車両の種類によって、必要な車両の数が決まります。したがって、車両を選択すると、「数量」フィールド(「#input_2_20」)が更新されます。次のページ/ステップでは、一方向または往復を選択する必要があるため、往復を選択すると、数量フィールドに2が掛けられます。次に、次のページ/ステップでは、注文の概要(確認ページ)が表示されます。ブラウザに戻ったときに値を再計算しないようにするにはどうすればよいですか?

現在のコードでは、確認ページにいて、前のページに戻って何かを変更しようとすると問題が発生します(おそらく、あなたは往復を望んでおらず、 )、数量番号は新しい値を保持し、今度は往復を選択するときに再び2で乗算されます。

jQuery(document).ready(function ($) { 
var totalBook; 
    $('#input_2_12').change(function() { 
     switch ($(this).val()) { 
      case 'Escalade|49': 
       $('#input_2_20').val(1); 
        totalBook = Math.ceil($('#input_2_6').val()/5); 
       $("#input_2_20").val(totalBook); 
       break; 
      case 'Suburban|0': 
       $('#input_2_20').val(1); 
        totalBook = Math.ceil($('#input_2_6').val()/6); 
       $("#input_2_20").val(totalBook); 
       break; 
      case 'Van|14': 
       $('#input_2_20').val(1); 
        totalBook = Math.ceil($('#input_2_6').val()/10); 
       $("#input_2_20").val(totalBook); 
       break; 
     } 
    }); 
    totalBookNew = $("#input_2_20").val(); 
    $('input:radio[name="input_7"]').change(function() { 
$('#input_2_20').val(totalBookNew); 
     if ($(this).val() == 'Round trip'){ 
      $('#input_2_20').val(totalBookNew); 
      newTotal = totalBookNew * 2; 
      $('#input_2_20').val(newTotal); 
     } 
     else if ($(this).val() == 'One way'){ 
      $('#input_2_20').val(totalBookNew); 
     } 
    }); 
}); 

私は本当にすべての助けに感謝...私はtotalBookNewを作成した理由です、

を私は2番目の関数に最初の関数から「totalBook」の値を使用してみましたが、それはundefinedを返します!

答えて

1

計算した値を元の入力フィールドに設定した後の主な問題のように見えます。最善の策は、隠れたhtml入力のどこかに計算を格納することです。したがって、次のような入力があります。

<input type="hidden" id="input_2_20_calculated" value=0> 

代わりに計算された値を入力に戻す代わりに、非表示の入力に設定します。非表示の入力はフォームと共に渡されるので、計算された値を使用することができます。これは、計算がトリガーされるたびに前回の計算値が2倍になるため、重複を取得する理由です。

totalBookNew = $("#input_2_20").val(); 
$('input:radio[name="input_7"]').change(function() { 
$('#input_2_20').val(totalBookNew); //This line can be deleted 
    if ($(this).val() == 'Round trip'){ 
     $('#input_2_20').val(totalBookNew); //You can also delete this line 
     newTotal = totalBookNew * 2; 
     $('#input_2_20_calculated').val(newTotal); 
    } 
    else if ($(this).val() == 'One way'){ 
     $('#input_2_20_calculated').val(totalBookNew); 
    } 
}); 

注意事項として、バックエンドで再計算する必要があります。フロントエンドで計算してバックエンドでこれらの計算を信頼しないでください。投稿データと偽の番号のフォームデータを操作するのは簡単です。

+0

ありがとうございます。余分な隠された入力フィールドは目が離せないものでした!あなたのサイドノートについて...私は同じ計算をやり直す必要がありますか?またはわずかなバリデーションだけですか?私は重力のフォームとWordpressを使用していると私はPHPで(またはあなたが気づいたかもしれないとしてjs) –

関連する問題