2016-07-27 13 views
0

すべての入力の合計が正確に100であり、数字のみであることを確認するには、以下のフォームを検証する必要があります。これまでのところ100以上であれば検証できますが、100未満であれば検証してみると、すべての値が入力される前に警告が表示されます。あなたはこれを防ぐことができますJavaScript形式の検証合計100

<form name="myForm" id="form1"> 
       <input oninput="findTotal()" type="text" name="qty" id="qty1" class="hvr-pop"/> <br> 
      <input oninput="findTotal()" type="text" name="qty" id="qty2" class="hvr-pop"/> <br> 
      <input oninput="findTotal()" type="text" name="qty" id="qty3" class="hvr-pop"/> <br> 
       <input oninput="findTotal()" type="text" name="qty" id="qty4" class="hvr-pop"/> <br> 
       <input oninput="findTotal()" type="text" name="qty" id="qty5" class="hvr-pop"/><br> 
      <input oninput="findTotal()" type="text" name="qty" id="qty6" class="hvr-pop"/><br> 


      <textarea type="text" name="total" id="total" class="hvr-pop" readonly placeholder="Must total 100"></textarea> 
     </form> 


<script> 
    function findTotal(){ 
      "use strict"; 
      var arr = document.getElementsByName('qty'); 
      var tot=0; 
      for(var i=0; i<arr.length;i++){ 
       if(parseInt(arr[i].value)) { 
        tot += parseInt(arr[i].value); 

        } 
       } 
      } 

      document.getElementById('total').value = tot; 



      // check that weightage scores = 100 

      if (tot > 100) { 
        alert("Please make sure numbers total 100"); 
        document.getElementByName("qty").value = null; 

        return false; 
       } 


     } 

    <script> 
+0

二つの方法:1.任意の 'qty'入力が空の場合、関数を終了しfindTotal()' 'の先頭にif文で置きます。 2.ボタンクリックからfindTotal()を実行します。これは、すべての 'qty'を入力した後でクリックできます。 – neilsimp1

+0

ありがとう、はい、私はオプション2を考えましたが、最適ではありません。私はオプション1は、ユーザーが値を入力すると、findTotal()がそれぞれを追加しているので動作しないと思います。その場合、空の値が計算されます – invincibleme

+0

その場合は、ループしている間に入力が空であるかどうかをチェックし、フラグを設定してください。ループの後で、フラグがtrueの場合、 'alert()'を返す/しない – neilsimp1

答えて

0
let total = [...document 
    .getElementById('form1') 
    .querySelectorAll('input')] 
    .reduce((acc, el) => acc += parseInt(el.value, 10), 0) 

if (total !== 100) 
    return console.warn('total inputs not 100') 
+0

"document.getElementById( 'total')を置き換えますか?value = tot; //その重みのスコア= 100を確認してください (TOT> 100){ 警告( "確認番号は100を合計してください"); document.getElementByName( "数量")値= NULL; 復帰はfalse; }であれば、」あなたは上記の持っているものと? – invincibleme

+1

このコードスニペットは問題を解決するかもしれませんが、[説明を含む](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)本当にあなたの投稿の質を向上させるのに役立ちます。将来読者の質問に答えていることを覚えておいてください。そうした人々はあなたのコード提案の理由を知らないかもしれません。また、コードと説明の両方の可読性が低下するため、説明的なコメントを使用してコードを混乱させないようにしてください。 – FrankerZ

関連する問題