Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/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无法识别HTML中的元素_Javascript_Html_Safari - Fatal编程技术网

JavaScript无法识别HTML中的元素

JavaScript无法识别HTML中的元素,javascript,html,safari,Javascript,Html,Safari,我的JavaScript代码应该使用AJAX接收数据,并将其显示在名为“txtHint”的DIV中。但是,这是代码执行时出现的错误(我在Safari中使用内置调试器): TypeError:表达式“document.getElementById(“txtHint”)的结果[null]不是对象 代码如下: function showItem(str) { if (str=="") { document.getElementById("txtHint").innerHTML=""; re

我的JavaScript代码应该使用AJAX接收数据,并将其显示在名为“txtHint”的DIV中。但是,这是代码执行时出现的错误(我在Safari中使用内置调试器):

TypeError:表达式“document.getElementById(“txtHint”)的结果[null]不是对象

代码如下:

function showItem(str)
{
if (str=="")
  {
  document.getElementById("txtHint").innerHTML="";
  return;
  } 
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","getitem.php?q="+str,true);
xmlhttp.send();
}
现在我得到: TypeError:表达式“el”[undefined]的结果不是对象


这是否意味着我的元素不存在?

首先,检查元素是否存在

var el = document.getElementById('txtHint');
if ( el ) {  
   el.innerHTML = xmlhttp.responseText;
}
确保在DOM中生成元素后绑定该元素。您还可以等待通过
window.onload=showItem
加载整个窗口

人们使用jQuery之类的框架来节省时间。您的代码将产生如下简洁的结果:

$(function() {
   function blah(str) {
      if ( str == '' ) {
        $('#txtHint').html('')
        return;
      }

      $.ajax({ url:'blah.php', success:function(html) {
        $('#txtHint').html(html);
      } })
   }
});

请发布您的标记。是否在DOM加载完成后运行此操作?否则,您将尝试在“txtHint”可访问之前获取它,因此getElementById(“txtHint”)将返回null。这可能适用于ajax请求中的回调,因为它是异步的,但如果str==“”,它会立即发生。如何查看DOM是否未完成,以及我的div是否尚未“注册”?