【问题标题】:How to solve the “Uncaught TypeError: Cannot read property 'checked' of null”如何解决“Uncaught TypeError: Cannot read property 'checked' of null”
【发布时间】:2018-01-24 03:11:18
【问题描述】:

我有“n”个复选框。 复选框显示:

<?php 
$result=mysql_query("select * from tablename where status='approved'");
$result1=$count=mysql_result(mysql_query("select max(id) from tablename  where status='approved'"),0);
$limit=mysql_num_rows($result);
while($row=mysql_fetch_array($result)){?> 

<input type="checkbox" name="chekgrp[]" id="cheks_<?php echo $row['id'];?>"  onclick="Checkchk()" value="<?php echo $row['id'];?>"  />
<?php }
?>

值 n 设置在隐藏字段中

<input type ="hidden" value="<?php echo $limit; ?>" id="hiddenval" name=" hiddenval">

javascript验证是:

var limits=parseInt(document.form.hiddenval.value);
var countelm=0;
for(i=1;i<= limits;i++){
    if (("cheks_"+i).length>0){
    if(document.getElementById("cheks_"+i).checked)
        {
            countelm = countelm +1;
        }
    }
}

如果将状态更改为未批准表中的元素,则会显示上述错误。我知道这是因为我改变了某些元素的状态。有没有其他方法可以检查元素是否存在(检查长度没有帮助)?如何解决这个错误?请帮帮我。

【问题讨论】:

  • ("cheks_"+i).length 指的是什么?
  • if (("cheks_"+i).length&gt;0) 的意义何在?永远是true
  • @Phil,3 秒 :)))
  • 在检查它的checked属性之前检查DOM节点是否存在,使用document.getElementById("cheks_"+i) &amp;&amp; document.getElementById("cheks_"+i).checked
  • 我想说这里的问题是,这不能保证结果集id 列是连续的(例如,1、2、3、4...)。使用for 循环会假设复选框具有连续的后缀。使用document.querySelectorAll('input[id^="cheks_"]') 可能会更好

标签: javascript php html checkbox


【解决方案1】:

试试下面的

  1. 使用document.querySelectorAll 查找所有复选框
  2. Array.prototype.slice 将列表截断为 $limit 项目
  3. Array.prototype.filter 将列表限制为 checked,并且
  4. Array.prototype.length 获取计数

HTML / PHP

<input type="checkbox" name="chekgrp[]" id="cheks_<?= $row['id'] ?>" onclick="Checkchk()" value="<?= $row['id'] ?>" />

JS

var limits = parseInt(document.getElementById('hiddenval').value, 10)
var selector = 'input[type="checkbox"][name="chekgrp[]"]'
var countelm = Array.prototype.slice.call(document.querySelectorAll(selector), 0, limits)
    .filter(function(checkbox) { return checkbox.checked })
    .length

【讨论】:

  • 感谢您的回答。但是 filter(checkbox => checkbox.checked) 这显示了一些错误。
  • @Adrian 你用的是什么浏览器?应该是很老了。我用更兼容的版本更新了我的答案
  • 非常感谢菲尔。你真的让我很开心。
猜你喜欢
  • 2018-06-30
  • 1970-01-01
  • 1970-01-01
  • 2019-08-08
  • 1970-01-01
  • 2021-07-29
  • 1970-01-01
  • 1970-01-01
  • 2022-10-18
相关资源
最近更新 更多