Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript null元素条件“if”中的错误未捕获TypeError:无法读取null的属性“1”_Javascript_Jquery - Fatal编程技术网

Javascript null元素条件“if”中的错误未捕获TypeError:无法读取null的属性“1”

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

我一直在

未捕获的TypeError:无法读取null的属性“1”

我知道它不存在,以后还会存在

有一个JSON框可以打开一个文本区域。在按下该按钮之前,元素文本_区域不存在。我想在元素存在之前检查元素。下面我已经有了一个使用setInterval的解决方案。我不知道为什么我的if语句不断抛出错误。如果元素存在或不存在,我如何在测试时不出错

//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
}