[英]JS check if getElementById exists
这是我课堂作业的一部分。 它是一个小型的 Web 应用程序。 下面的代码部分是一个选择按钮(复选框)的函数。 代码工作正常。
我的问题是我在控制台上收到此错误:
未捕获的类型错误:无法将属性“已检查”设置为 null
在 selectGirls (indexj.js:163)
在 HTMLAnchorElement.onclick (index.html:137)
我知道我收到此错误,因为我在每个页面上都没有这些元素。 为了澄清这一点,我的意思是第 1 页有两个复选框,但第 2 页有 5 个复选框,就像这样。
我想对所有页面使用相同的 JS 文件。 我的问题是如何最好地避免这些控制台错误? 我不想让它们从控制台隐藏作为解决方案。 我非常感谢您的意见。
function selectAllStudents() { unselectAllStudents(); let boxes = $(".scores").toArray(); document.getElementById('check_Terrilyn').checked = true; document.getElementById('check_Vinnie').checked = true; document.getElementById('check_Boren').checked = true; document.getElementById('check_Tempie').checked = true; document.getElementById('check_Mapes').checked = true; document.getElementById('check_Fletcher').checked = true; document.getElementById('check_Bovee').checked = true; document.getElementById('check_Figgs').checked = true; }
最简单的就是检查他们是否在那里
if (document.getElementById('check_Terrilyn'))
document.getElementById('check_Terrilyn').checked = true;
编辑
考虑到复选框数量未知,更现代的方法可能是使用querySelectorAll
。
它将返回元素的数组,例如,和你的代码提示,所有checkeboxes的id
与启动check_
,你可以像这样与使用属性选择:
var els = document.querySelectorAll('[id^="check_"]'); els.forEach(function (el) { el.checked = true; });
<input id="check_0" type="checkbox" value="0"> <input id="check_1" type="checkbox" value="1"> <input id="check_2" type="checkbox" value="2"> <input id="check_3" type="checkbox" value="3">
if (document.getElementById('check_Terrilyn')){
document.getElementById('check_Terrilyn').checked = true;
}
//ES6
Array.from(document.getElementsByClassName('commonclass')).forEach(e => {
e.checked = true;
});
你可以这样做:
let elm = document.getElementById('check_Terrilyn');
elem && elem.checked = true;
我用来做
if(document.getElementById('check_Terrilyn')!="null")
document.getElementById('check_Terrilyn').checked=true;
我看到您已经在使用 jQuery。 为什么不完全使用它,并停止使用getElementById
?
只需执行$( ... ).prop('checked',true)
。 jQuery 将处理找不到元素的情况。
function selectAllStudents() {
unselectAllStudents();
let boxes = $(".scores").toArray();
$('#check_Terrilyn, #check_Vinnie, #check_Boren, #check_Tempie, #check_Mapes, #check_Fletcher, #check_Bovee, #check_Figgs').prop('checked',true);
}
如果您将它们全部设置为选中状态,则按class
选择它们并循环遍历它们。 这样就算找不到也没关系。
您似乎也在使用 jQuery,因此可以将代码简化为:
function selectAllStudents() {
unselectAllStudents();
let boxes = $(".scores").toArray();
$('.checkbox').prop('checked', true);
}
既然你已经标记了 jquery,那么使用prop
function selectAllStudents() {
unselectAllStudents();
let boxes = $(".scores").toArray();
$('#check_Terrilyn').prop( "checked", true );
//for the rest of them
}
或者创建一个 id 数组,您可以在设置其checked
属性之前迭代并检查它们是否存在
var array = ['check_Terrilyn', 'check_Vinnie']; //add more ids as required
array.forEach( s => $("#"+s).prop( "checked", true ) );
或者使用普通的 js
var array = ['check_Terrilyn', 'check_Vinnie']; //add more ids as required
var fnGetEl = (id) => document.getElemetById(id);
array.forEach( s => {
var el = fnGetEl(s);
if(el)
{
el.checked = true;
}
});
if(document.getElementById("id_selector2teller")){
alert("id_selector2teller exists");
}else{
alert("id_selector2teller not available");
}
如果您想检查元素是否存在并同时将其分配给变量(如果元素不存在,则将其设置为“false”),这将起作用:
var check_Terrilyn = document.getElementById('check_Terrilyn') ?
document.getElementById('check_Terrilyn').checked : false;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.