首页 > 解决方案 > 在 PHP while 循环中生成的 Jquery 代码返回 NaN 进行计算

问题描述

我在页面上有很多输入字段,在表中有 47 行我正在使用 php while 循环来生成 jquery 代码并为行创建自动递增 ID 号

然后,当相应行的输入字段中的值发生更改时,我尝试计算每行中各个列的值,但是我不断返回 NaN。

我看过 SO 上提到的类似问题,但在我的情况下似乎没有建议的答案

这是我用于创建表格的 PHP 代码

<?php  $id = 1; 
  do {
    $col1 = $id.'a';  
    $col2 = $id.'b';
    $col3 = $id.'c';
    $col4 = $id.'d';
    $col5 = $id.'e';
    $col6 = $id.'f';
    $col7 = $id.'g';
    $col8 = $id.'h';
    $col9 = $id.'i';
    $col10 = $id.'j';
    $col11 = $id.'k';
    $col12 = $id.'l';

?>
  <tr id="<?php echo "calculate$id";?>" style="border:0px solid #ffffff;">
    <td class="tg-0lax"><?php echo $res['process_type_code'].'  '.$res['process_type'];?></td>
    <td class="tg-0lax"><input id="<?php echo $col1;?>" type="text" style="width:50px; border:none;text-align:center" value="<?php echo $res['rebagging_cost'];?>" /></td>
    <td class="tg-0lax"><input id="<?php echo $col2;?>" type="text" style="width:50px; border:none;text-align:center" value="<?php echo $res['rebagging_process_loss'];?>" /></td>
    <td class="tg-0lax"><input id="<?php echo $col3;?>" type="text" style="width:50px; border:none;text-align:center" value="<?php echo $res['sifting_seiving_cost'];?>" /></td>
    <td class="tg-0lax"><input id="<?php echo $col4;?>" type="text" style="width:50px; border:none;text-align:center"width="10px" value="<?php echo $res['sifting_seiving_process_loss'];?>" /></td>
    <td class="tg-0lax"><input id="<?php echo $col5;?>" type="text" style="width:50px; border:none;text-align:center" value="<?php echo $res['blending_cost'];?>" /></td>
    <td class="tg-0lax"><input id="<?php echo $col6;?>" type="text" style="width:50px; border:none;text-align:center" value="<?php echo $res['blending_process_loss'];?>" /></td>
    <td class="tg-0lax"><input id="<?php echo $col7;?>" type="text" style="width:50px; border:none;text-align:center" value="<?php echo $res['cracking_cost'];?>" /></td>
    <td class="tg-0lax"><input id="<?php echo $col8;?>" type="text" style="width:50px; border:none;text-align:center" value="<?php echo $res['cracking_process_loss'];?>" /></td>
    <td class="tg-0lax"><input id="<?php echo $col9;?>" type="text" style="width:50px; border:none;text-align:center" value="<?php echo $res['milling_cost'];?>" /></td>
    <td class="tg-0lax"><input id="<?php echo $col10;?>" type="text" style="width:50px; border:none;text-align:center" value="<?php echo $res['milling_process_loss'];?>" /></td>
    <td class="tg-0lax"><input id="<?php echo $col11;?>" type="text" style="width:50px; border:none;text-align:center" value="<?php echo $res['heat_treatment_cost'];?>" /></td>
    <td class="tg-0lax"><input id="<?php echo $col12;?>" type="text" style="width:50px; border:none;text-align:center" value="<?php echo $res['heat_treatment_process_loss'];?>" /></td>
    <td class="tg-0lax"><input id="totalprocesscostton<?php echo $id;?>" readonly="readonly" type="text" style="width:50px; border:none;text-align:center" /></td>
    <td class="tg-0lax"><?php echo $res['total_process_cost_kg'];?></td>
    <td class="tg-0lax"><?php echo $res['total_process_loss_pct'];?></td>
    <td class="tg-0lax"><?php echo $res['processed_or_finished'];?></td>
  </tr>
  <?php $id++; } while($res = mysqli_fetch_assoc($query));?>

这是为每一行创建 Jquery 代码的 PHP 代码

<?php 
    $row = 1;
    $cola = $row.'a';  
    $colb = $row.'b';
    $colc = $row.'c';
    $cold = $row.'d';
    $cole = $row.'e';
    $colf = $row.'f';
    $colg = $row.'g';
    $colh = $row.'h';
    $coli = $row.'i';
    $colj = $row.'j';
    $colk = $row.'k';
    $coll = $row.'l';
do {
echo "<script>
      $(\"#calculate$row\").click(function() {      
          var a = $(\"#".$cola."\").val();
          var b = $(\"#".$colb."\").val();
          var c = $(\"#".$colc."\").val();
          var d = $(\"#".$cold."\").val();
          var e = $(\"#".$cole."\").val();
          var f = $(\"#".$colf."\").val();
          var g = $(\"#".$colg."\").val();
          var h = $(\"#".$colh."\").val();
          var i = $(\"#".$coli."\").val();
          var j = $(\"#".$colj."\").val();
          var k = $(\"#".$colk."\").val();
          var l = $(\"#".$coll."\").val();
          var totalprocesscostton = parseInt(a) + parseInt(c) + parseInt(e) + parseInt(g) + parseInt(i) + parseInt(k);
          $(\"#totalprocesscostton".$row."\").val(totalprocesscostton);

      });
    </script>";
$row++;
}while ($row !=47);
?>

希望有人能对此有所了解 ** 编辑:添加了更新后的图像,并提供了更好的描述

这是带有数据的表格的屏幕截图

标签: phpjquery

解决方案


查看parseInt返回值:从给定字符串解析的整数。如果第一个字符不能转换为数字,则返回 NaN。

您可以使用三元运算符来确保始终设置 int。

var a = ( isNaN( parseInt( $("#".$cola."\").val() ) ) ? 0 : parseInt($("#".$cola."\").val()) );

推荐阅读