【问题标题】:Javascript Syntax ErrorJavascript 语法错误
【发布时间】:2011-05-09 10:38:43
【问题描述】:

当我运行下面的代码时,Safari 的调试控制台告诉我:

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

似乎在这一行抛出错误:

document.getElementById("txtHint").innerHTML=xmlhttp.responseText;

代码

 function showItem(str)
{
if (str.length==0)
  {
  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 && xmlhttp.responseText!='')
    {
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","getitem.php?q="+str,true);
xmlhttp.send();
}

我不确定为什么会抛出这个错误。绝对有一个 ID 为“txtHint”的 DIV,但 safari 似乎无法正确运行此代码。我想我的问题是,这段代码有什么问题。

【问题讨论】:

  • 这里有什么问题?听起来ID 没有元素。
  • console.log(document.getElementById('txtHint').length); 说什么?

标签: javascript html ajax dom xmlhttprequest


【解决方案1】:

是的,同意伊恩亨利的观点。从报错信息中,我猜测文档中没有id为“txtHint”的元素。

【讨论】:

    【解决方案2】:

    这不是语法问题,它告诉您document.getElementById("txtHint") 返回了null(即没有具有该id 的元素),这意味着结果(null)不是对象,这意味着您可以'不要打电话给.innerHTML

    【讨论】:

      【解决方案3】:

      这不是重复的问题吗?无论如何,尝试在结束体标记之前抛出脚本或在dom准备好/窗口加载之后调用函数。

      【讨论】:

      • 对,window.onload 或 DOM 就绪函数。我会亲自将您的代码转换为 jQuery。
      • 我在你给我的最后一个答案中看到了,但是我对此很陌生,我有点不知所措。用这段代码去jquery有什么好处?
      • jQuery 抽象出浏览器的差异,因此您无需执行以下操作:if (window.XMLHttpRequest) { // code for new browsers
      猜你喜欢
      • 2013-10-26
      • 1970-01-01
      • 1970-01-01
      • 2021-04-29
      • 1970-01-01
      • 1970-01-01
      • 2018-11-29
      相关资源
      最近更新 更多