Javascript null元素条件“if”中的错误未捕获TypeError:无法读取null的属性“1”
我一直在 未捕获的TypeError:无法读取null的属性“1” 我知道它不存在,以后还会存在 有一个JSON框可以打开一个文本区域。在按下该按钮之前,元素文本_区域不存在。我想在元素存在之前检查元素。下面我已经有了一个使用setInterval的解决方案。我不知道为什么我的if语句不断抛出错误。如果元素存在或不存在,我如何在测试时不出错Javascript null元素条件“if”中的错误未捕获TypeError:无法读取null的属性“1”,javascript,jquery,Javascript,Jquery,我一直在 未捕获的TypeError:无法读取null的属性“1” 我知道它不存在,以后还会存在 有一个JSON框可以打开一个文本区域。在按下该按钮之前,元素文本_区域不存在。我想在元素存在之前检查元素。下面我已经有了一个使用setInterval的解决方案。我不知道为什么我的if语句不断抛出错误。如果元素存在或不存在,我如何在测试时不出错 //I tried if (type of ), var text_area = document.query... $( document ).read
//I tried if (type of ), var text_area = document.query...
$( document ).ready(function() {
function check_for_element() {
if ( ! document.querySelector("form.compose.initialized")[1]){
console.log("searching for element.....");
window.requestAnimationFrame(check_for_element );
}
}
window.requestAnimationFrame(check_for_element);
});
/* MY OLD CODE WORKS ---> */
var timer = setInterval(function() {
if (document.querySelector("form.compose.initialized")[1]) {
/*CODE HERE WORKS UNTIL IT EXISTS NO ERRORS */
setTimeout (window.close, 5000);
clearInterval(timer);
}
}, 200);
p.S使用opera/ff和tampermonkey/Greasemonkey想象一下,如果没有form.compose.initialized,则document.querySelectorform.compose.initialized将返回null,此时您正试图访问索引1处的第二个元素,在这种情况下,这将是一个错误 相反
if (document.querySelector("form.compose.initialized")) {
...
}
或
document.querySelector返回一个元素,而不是元素数组。删除[1],它应该可以工作
如果要检查是否存在第二个元素form.compose.initialized,请检查结果的长度:
var elements = document.querySelector("form.compose.initialized");
if (elements && elements.length >= 1) {
// ...
}
document.querySelector只返回单个元素或null,它从不返回数组。所以没有理由对它进行索引。应该是
if (document.querySelector("form.compose.initialized")) {
...
}
document.querySelector返回第一个匹配元素,而不是列表。如果这正是您想要的,只需使用:
var mine = document.querySelector("form.compose.initialized");
if (mine) {
// do something with it
}
如果确实需要列表中的第二个元素,则需要document.querySelectorAll
querySelector返回单个元素。。。如何将其用作数组?怀疑你的旧代码是否有效。@paul嘿,谢谢,这就是问题所在。用var text_area=document.querySelectorAll[id^='message_'][1]解决了这个问题;我认为这是另一个问题,或者我对JS如何工作缺乏了解,但我注意到,即使请求动画在循环中,我的所有代码都会被执行。元素的requestAnimationFramecheck\u;console.loghey我在末尾,但即使check\u for\u元素为false,我仍然会被执行。也许因为RAF是背景浏览器的东西。;
var mine = document.querySelector("form.compose.initialized");
if (mine) {
// do something with it
}
var els = document.querySelectorAll("form.compose.initialized");
if (els.length > 1)
{
var mine = els[1];
// do something with it
}