2017-02-18 5 views
0

こんにちはみんな私のスクリプトは完璧に動作していますが、私はこの小さな厄介な問題を解決したいが、私は可能かどうかはわかりません。jqueryを使用して入力値の代わりに配列またはswitch文からの条件

私のようなこのフォーム要素を持っている、ラジオチェックボックスよう、データリストと入力タイプを選択私は条件文をコーディングする方法は、私は私の問題は、どのような場合は原因発生し、その値に依存しているということです私は後で値を変更する?私は自分のコードを変更する必要があります。

例は、私は、ユーザーが、ユーザーが今

$('input:radio[name="meal-356"]').change(function(ev) { 

    if ($(this).val() == 'Burger with fries') { 
    var meal = 20; 
    } else { 
    var meal = 30; 
    } 
    $('#meal').text((meal).toFixed(2)).trigger('change'); 

}); 

「フライドポテトとバーガー」を選択した場合、彼らは

<h2>Question 1: meal</h2> 
    <div class="meal-wrapper"> 
    <label class="radio"> 
     <input name="meal-356" value="Burger with fries" type="radio"/> 
     Burger with fries 
    </label> 
    </div> 
    <div> 
    <label class="radio"> 
    <input name="meal-356" value="Chicken with rice" type="radio" /> 
    Chicken with rice</label> 
    </div> 

をたい食事を選択し、どちらか彼らは例を選択するために値を追加する必要があり、このラジオ入力を持っています私が望むのは、入力値に頼るのではなく、単に配列を使うことができますか、それとも難しいか、入力値が変更されたときに手動でコードを編集する必要がないように、簡単なソリューションを提案できます。

ここで事前のおかげで私の完全なスクリプトは、私はあなたが[key,value]ペアを利用Mapデータ型を使用することをお勧め

$(document).ready(function() { 
 

 
    $('input:radio[name="meal-356"]').change(function(ev){ 
 

 
     if ($(this).val() == 'Burger with fries') { 
 
      var meal = 20; 
 
     } 
 
     else { 
 
      var meal = 30; 
 
     } 
 

 
     $('#meal').text((meal).toFixed(2)).trigger('change'); 
 

 
    }); 
 

 
    $('input:radio[name="drinks-123"]').change(function(ev){ 
 

 
     if ($(this).val() == 'Ice Tea') { 
 
      var drinks = 1; 
 
     } 
 
     else if ($(this).val() == 'Coke') { 
 
      var drinks = 1.20; 
 
     } 
 
     else if ($(this).val() == 'Lemonade') { 
 
      var drinks = 2; 
 
     } 
 
     else if ($(this).val() == 'Water') { 
 
      var drinks = 1.75; 
 
     } 
 
     else if ($(this).val() == 'Hot choco') { 
 
      var drinks = 3; 
 
     } 
 
     else if ($(this).val() == 'Hot coffee') { 
 
      var drinks = 1.25; 
 
     } 
 
     else { 
 
      var drinks = 0; 
 
     } 
 

 
     $('#drinks').text((drinks).toFixed(2)).trigger('change'); 
 
    }); 
 

 

 
    $('input:radio[name="extras-781"]').change(function(ev){ 
 

 
     if ($(this).val() == 'Rice') { 
 
      var extras = 10; 
 
     } 
 
     else if ($(this).val() == 'Gravy') { 
 
      var extras = 5; 
 
     } 
 
     else { 
 
      var extras = 0; 
 
     } 
 
     $('#extras').text((extras).toFixed(2)).trigger('change'); 
 
    }); 
 

 
    $('textarea[name="spoon-112"]').keyup(function(ev){ 
 

 
     var spoon = $(this).val().replace(/\n/g, '<br/>'); 
 
\t \t var spoon = spoon*.25; 
 
     $("#spoon").text(spoon).trigger('change'); 
 

 
    }); 
 

 
    $('input:text[name="fork-143"]').keyup(function(ev){ 
 

 
     var fork = $(this).val().replace(/\n/g, '<br/>'); 
 
\t \t var fork = fork*.5; 
 
     $("#fork").text(fork).trigger('change'); 
 
    }); 
 

 

 

 
    $('#meal, #drinks, #extras, #spoon, #fork').on('change', function(e) { 
 
     var total = $('#meal, #drinks, #extras, #spoon, #fork').toArray().reduce(function(acc, val) { 
 
      return acc + +val.textContent ; 
 
     }, 0); 
 
     $('#total').text(total.toFixed(2)); 
 
    }) 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
 
<h1>Calculator base on radio buttons</h1> 
 
<h2>Question 1: meal</h2> 
 
<div class="meal-wrapper"> 
 
    <label class="radio"><input name="meal-356" value="Burger with fries" type="radio"/>Burger with fries</label> 
 
<br /> 
 
    <label class="radio"><input name="meal-356" value="Chicken with rice" type="radio" />Chicken with rice</label> 
 
</div> 
 

 
<h2>Question 2: drinks</h2> 
 
<div class="drinks-123-wrapper"> 
 
    <input type="radio" name="drinks-123" value="Ice Tea" /> Ice Tea 
 
    <input type="radio" name="drinks-123" value="Coke" /> Coke 
 
    <input type="radio" name="drinks-123" value="Lemonade" /> Lemonade 
 
    <input type="radio" name="drinks-123" value="Water" /> Water 
 
    <input type="radio" name="drinks-123" value="Hot choco" /> Hot choco 
 
    <input type="radio" name="drinks-123" value="Hot coffee" /> Hot coffee 
 
    <input type="radio" name="drinks-123" value="No drinks-123" /> No drinks-123 
 
</div> 
 

 
<h2>Question 3: extras</h2> 
 
<div class="drinks-wrapper"> 
 
    <input type="radio" name="extras-781" value="Rice" /> Rice 
 
    <input type="radio" name="extras-781" value="Gravy" /> Gravy 
 
    <input type="radio" name="extras-781" value="No Extra" /> No Extra 
 
</div> 
 

 
<h2>Question 4: How many extra spoon?</h2> 
 
<div class="spoon-wrapper"> 
 
    <textarea name="spoon-112" rows="3"></textarea> 
 
</div> 
 

 
<h2>Question 5: How many extra fork?</h2> 
 
<div class="fork-wrapper"> 
 
    <input name="fork-143" type="text" value="" placeholder=""/> 
 
</div> 
 

 
<hr /> 
 
<div class="price-wrapper"> 
 
    <b>meal:</b> <span id="meal"></span> 
 
    <div></div> 
 
    <b>drinks:</b> <span id="drinks"></span> 
 
    <div></div> 
 
    <b>extras:</b> <span id="extras"></span> 
 
    <div></div> 
 
    <b>spoon:</b> <span id="spoon"></span> 
 
    <div></div> 
 
    <b>fork:</b> <span id="fork"></span> 
 
</div> 
 

 
<div class="total-wrapper"> 
 
    <h3> 
 
     <b>Total:</b><span id="total"></span> 
 
    </h3> 
 
</div>

+0

'の' –

答えて

1

です。私はそれがあなたのケースに適していると思う、重複キーがないと仮定します。

$(document).ready(function() { 
 
    var mealMap = new Map(); 
 
    mealMap.set("Burger with fries", 20); 
 
    mealMap.set("Chicken with rice", 30); 
 
    $('input:radio[name="meal-356"]').change(function(ev){ 
 
     var meal = mealMap.get($(this).val()); 
 
     $('#meal').text((meal).toFixed(2)).trigger('change'); 
 

 
    }); 
 
});

EDIT:

あなたが望むものによると、それは唯一のinputindexに依存することができます。

$(document).ready(function(){ 
 
    $('.meal-wrapper input:radio[name="meal-356"]').change(function(ev){ 
 
    if ($('.meal-wrapper input:radio[name="meal-356"]').index(this) == 0) { 
 
     var meal = 20; 
 
    } else if ($('.meal-wrapper input:radio[name="meal-356"]').index(this) == 1) { 
 
     var meal = 30; 
 
    } 
 
    $('#meal').text((meal).toFixed(2)).trigger('change'); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
 
<h1>Calculator base on radio buttons</h1> 
 
<h2>Question 1: meal</h2> 
 
<div class="meal-wrapper"> 
 
    <label class="radio"><input name="meal-356" value="Burger with fries" type="radio"/>Burger with fries</label> 
 
<br /> 
 
    <label class="radio"><input name="meal-356" value="Chicken with rice" type="radio" />Chicken with rice</label> 
 
</div>

+0

入力に感謝しかし、私はそれを変更することができますので、フライドポテトとハンバーガーをされている値を入力しないようにしようとしています将来jqueryコードを変更することなくいつでも変更することができます – cryptohustla

+0

@cryptohustla私は、対応する 'input'のプロパティとして' 20'、 '30'などの値を定義しない限り、できないと思います。しかし、バックエンドについてもう一度チェックをしない限り、セキュリティ上の問題のために推奨しません。あなたはそれを行うのですか? –

+0

@cryptohustlaロジックに欠陥があり、それについてもう一度考えてみてください。アイテムの順序が固定されていると仮定すると、[index](https://api.jquery.com/index/)を使うことができます。 –

関連する問題