未捕获的类型错误:无法读取空值的“checked”属性

3

我有2个php文件。action.php和main.php

main.php被包含在action.php中

在action.php中,我有一个按钮和一个输入框。

<input type="text" class="form-control" name="multip" id="multip" value="" placeholder="MULTIPLY"/>
<button type="button" class="btn btn-primary" name="distribute" onclick="multiply()">Submit</button>

在 main.php 中。
            $i = 1;
            $sum1=0;
            $distrib = array();
            if ($result = $mysqli->query($query)) {
                while ($row = $result->fetch_assoc()) {
                    $count = $row["count"];
                    $price = floor($row["currency"]*$row["buyPrice"]);
                    $iid = $row["iid"];
                    $distrib[]=$count;
                    $sum1 += $row["count"]*$row["buyPrice"];
                    echo '';
                    echo '<tr><td><input type="checkbox" name="check[]" id="checked_'.($i-1)
                    .'" value="'.$row["count"].'"> &nbsp; </td>
                          <th scope="row">'.$i++.'</th>
                          <td>'.$row["insert_version"].'</td>
                          <td>'.$row["code"].'</td></tr>';
                    
            }
         $result->free();
        }
        $mysqli->close();

以及 main.php 的脚本部分

<script>
     let dist = <?php echo json_encode($distrib); ?>;
        let mult;
        let count = <?php echo json_encode($count); ?>;
        let i = +"<?php echo $i; ?>";

        function multiply(){

       let bashxel = parseInt(document.getElementById("multip").value);
            mult = 0;

        for (let k = 0; k<i; k++) { 
            let checkBox = document.getElementById("checked_"+k);
            if (checkBox.checked === true) {
                mult+=parseInt(dist[k]);
                console.log(mult); //this works
                
        }} 

          console.log(mult+100); //this doesn't work
         //Error from here
        };

        
    </script>

我不知道为什么会出现这个问题。我搜索了相关内容,但没有找到解决方法。请帮助我解决这个问题。

1个回答

3
更好的代码
const mult = [...document.querySelectorAll('[name^=check]:checked')]
  .map((_,k) => +dist[k])
  .reduce((a,b) => a+b)
 

但是回答你的问题

你的错误可能在于你从1开始计数,这里是$i = 1;

  1. $i = 1;改为$i = 0;
  2. <th scope="row">'.$i++.'</th>改为<th scope="row">'.($i+1).'</th>
  3. $i++;移到循环的结尾

或者改为

let i = document.querySelectorAll('[name^=check]:checked').length


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接