使用jquery计算填充的字段

时间:2018-04-30 00:55:54

标签: jquery

我有下面的代码,它将字段的值相加并除以3。

<?php 
while($peListar = mysqli_fetch_object($sqlListar){
    .....
    $listar .= "<td style='".$fundo."'><input type='text' name='ValorI[]'  class='md-form-control'  value=''></td>";
    $listar .= "<td style='".$fundo."'><input type='text' name='ValorII[]' class='md-form-control' value=''></td>";
    $listar .= "<td style='".$fundo."'><input type='text' name='ValorIII[]' class='md-form-control' value=''></td>";
    $listar .= "<td style='".$fundo."'><input type='text' name='ValorFinal[]' class='md-form-control' value=''></td>";
    .....
}

?>

<script>
 $("[name^='NotaI']").on("input", function(){

       var parent = $(this).closest(\"tr\");

       var valorA = $("[name='ValorI[]']",parent).val() || 0;
       var valorB = $("[name='ValorII[]']",parent).val() || 0;
       var valorC = $("[name='ValorIII[]']",parent).val() || 0;

       var valor1 = parseFloat(valorA.replace(',', '.'));
       var valor2 = parseFloat(valorB.replace(',', '.'));
       var valor3 = parseFloat(valorC.replace(',', '.'));

       var somar = ((valor1+valor2+valor3)/3).toFixed(1);
       $(\"[name='ValorFinal[]']\", parent).val(somar);
 });
</script>

我想知道如何根据填充字段的数量更改除数,忽略空字段。例如:

如果用户填充2个字段并忽略1个字段,则除数将为2。

对不起我的英文

谢谢!

1 个答案:

答案 0 :(得分:1)

只是一个简单的检查。请参阅以下评论。

let sum = 0,
    count = 0,
    average = 0;
    
$('input[name^=ValorI]').on('input', function(){
  sum = 0;
  count = 0;
  $('input[name^=ValorI]').each(function(i, element){
    let value = this.value.replace(',', '.'), // replace ',' with '.'
        isEmpty = value == "",
        isInvalid = isNaN(value);
        
    // check if the value is empty or not
    // if the value is not epmty, replace ',' with '.'
    value = isEmpty ? 0 : value;
    
    // count the input numbers, ignore NaN values or empty value
    count = isInvalid || isEmpty ? count : ++count;
    
    value = isInvalid ? 0 : parseFloat(value);
    
    sum += value;
  })
  average = count > 0 ? (sum / count).toFixed(1) : 0;
  $('input[name="ValorFinal[]"]').val(average || "");
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
ValorI: <input type='text' name='ValorI[]'  class='md-form-control'  value=''><br>
ValorII: <input type='text' name='ValorII[]'  class='md-form-control'  value=''><br>
ValorIII: <input type='text' name='ValorIII[]'  class='md-form-control'  value=''><br>
ValorFinal: <input type='text' name='ValorFinal[]'  class='md-form-control'  value=''>