Javascript错误:[elementname]没有属性

时间:2008-09-26 17:59:46

标签: javascript ajax

我正在对webapp进行一些维护编码,我收到表单的javascript错误:“[elementname]没有属性”

部分代码是通过AJAX调用动态生成的,该调用更改了部分页面的innerHTML,完成后我需要将一段数据从隐藏的输入字段复制到可见的输入字段。 所以我们有目标字段:<input id="dest" name="dest" value="0">
和源字段:<input id="source" name="source" value="1">
现在当ajax运行时,它会覆盖源所在的div的innerHTML,因此源字段现在显示为:<input id="source" name="source" value="2">

在将ajax数据复制到innerHTML的javascript行之后,下一行是: document.getElementById('dest').value = document.getElementById('source').value;

我收到以下错误:Error: document.getElementById("source") has no properties

(我还尝试了document.formname.sourcedocument.formname.dest和同样的问题)

我错过了什么?

注1:页面已满载且元素存在。 ajax调用仅在用户操作后发生,并替换元素所在的html部分。

注2:至于不使用innerHTML,这就是代码库给我的方式,为了删除它,我需要重写所有的ajax调用,这不在当前维护周期的范围内。 / p>

注意3:使用新数据更新innerHTML,正在复制包含数据和格式的整个表,我试图在这个大块的末尾添加一个布尔值,而不是为一个创建一个全新的ajax调用布尔值。看起来这就是我将要做的事情...因为我的黑客最终然后复制方法不起作用。

额外的一双眼睛FTW。

是的,我有几个人在工作中看一看,他们发现我的打字错误...我发誓我有权利开始,但嘿,我们生活和学习......

感谢帮助人员。

6 个答案:

答案 0 :(得分:3)

“[elementname]没有属性”是javascript错误代表“你试图引用的元素不存在或者是nil”

这意味着你有一个或多个可能的问题:

  1. 您的页面尚未呈现,并且您尝试在它存在之前引用它
  2. 你有拼写错误
  3. 您已将您的ID命名为保留字(例如,在提交按钮上提交)
  4. 你认为你引用的是你真的不是(传递的变量不是你想象的那样)

答案 1 :(得分:2)

确保您的代码在页面完全加载后运行。如果您的代码在您要查找的元素之前运行,则会发生此类错误。

答案 2 :(得分:1)

您对此功能的描述是什么:

<div id="test2">
    <input id="source" value="0" />
</div>
<input id="dest" value="1" />

<script type="text/javascript" charset="utf-8">
//<![CDATA[
function pageLoad()
{
    var container = document.getElementById('test2');
    container.innerHTML = "<input id='source' value='2' />";
    var source = document.getElementById('source');
    var dest = document.getElementById('dest');
    dest.value = source.value;
}
//]]>
</script>

这适用于常见的浏览器(我在IE,Firefox和Safari中查看过);你在使用其他浏览器,或者你确定它在innerHTML动作上创建了正确的元素吗?

答案 3 :(得分:0)

听起来DOM没有使用新元素更新给我。

就此而言,为什么要重写整个div只是为了改变源输入?直接改变源的价值会不会那么容易?

答案 4 :(得分:0)

这是一个延伸,但可能就是诀窍 - 我之前已经看过这个并且这个黑客确实有效。

所以,你说:

  

在将ajax数据复制到innerHTML的javascript行之后,下一行是:      document.getElementById('dest')。value = document.getElementById('source')。value;

将该行更改为:

setTimeout(function() {
   document.getElementById("dest").value = document.getElementById("source").value;
}, 10);

你真的不应该这样,但是你设置innerHTML然后尝试访问“source”元素之间的时间可能很快,以至于浏览器无法找到它。我知道,听起来完全糟糕,但我已经看到浏览器在某些情况下由于某种原因而在我之外做这件事。

答案 5 :(得分:-1)

通常,您不应该使用innerHTML,而是使用DOM方法创建元素。我不知道这是不是你的问题。