Javascript错误:[elementname]没有属性

Javascript错误:[elementname]没有属性,javascript,ajax,Javascript,Ajax,我正在一个webapp上进行一些维护编码,我得到一个javascript错误,其形式为:“[elementname]没有属性” 部分代码是通过AJAX调用动态生成的,该调用更改了部分页面的innerHTML,完成后,我需要将一段数据从隐藏的输入字段复制到可见的输入字段。 因此我们有了目的地字段: 和源字段: 现在,当ajax运行时,它会覆盖源所在的div的innerHTML,因此源字段现在显示为: Ok在将ajax数据复制到innerHTML的javascript行之后,下一行是: docume

我正在一个webapp上进行一些维护编码,我得到一个javascript错误,其形式为:“[elementname]没有属性”

部分代码是通过AJAX调用动态生成的,该调用更改了部分页面的innerHTML,完成后,我需要将一段数据从隐藏的输入字段复制到可见的输入字段。 因此我们有了目的地字段:

和源字段:

现在,当ajax运行时,它会覆盖源所在的div的innerHTML,因此源字段现在显示为:

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

我得到以下错误:
error:document.getElementById(“源”)没有属性

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

我错过了什么

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

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

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

额外的一双眼睛FTW

是的,我让几个人看了一下我的工作,他们发现了我简单的打字错误。。。我发誓我一开始就有这个权利,但是嘿,我们生活和学习


谢谢大家的帮助。

一般来说,您不应该使用innerHTML,而应该使用DOM方法创建元素。我不能说这是否是您的问题。

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

您描述的是此功能:

<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操作中创建的元素正确?

“[elementname]没有属性”是javascript错误,表示“您尝试引用的元素不存在或为零”

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

  • 您的页面尚未呈现,您正在尝试在它存在之前引用它
  • 你有拼写错误
  • 您已将id命名为与保留字相同的名称(例如,在提交按钮上提交)
  • 您认为您正在引用的内容实际上不是(传递的变量不是您认为正在传递的)

  • 对我来说,DOM似乎没有用新元素更新


    因此,为什么要重写整个div来更改源输入?直接更改源代码的值不是很容易吗?

    这是一个延伸,但可能就是其中的诀窍——我以前见过这种方法,而且这种方法确实有效

    所以,你说:

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

    将该行更改为:

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

    您确实不需要这样做,但设置innerHTML和尝试访问“source”元素之间的时间可能太快,以至于浏览器无法找到它。我知道,这听起来很糟糕,但我看到浏览器在某些情况下会这样做,原因我无法理解。

    你能发布一个小的、完全可以工作的示例来复制你的问题吗?调试被AJAX调用修改的页面的一种方法是在浏览器中进行全选,复制并粘贴到理解HTML的内容中(我在设计模式下在空白的新页面上使用Dreamweaver)。这将为您提供生成的HTML。FireBug等工具也为您提供了此功能。Firefox的Web developer工具栏还将允许您从“查看源代码”菜单项中“查看生成的源代码”。Grrr,我创建了一个简单的示例,但它没有显示问题。我将不得不使用其他工具direction@Jim:听起来不错-希望你过得愉快我们能够得到它。这就是代码库交给我的方式,我没有时间或权限重写所有的ajax调用。一个用html和数据预格式化的整张表正在被复制,我在同一个ajax调用中添加了1条信息,我的目标不是只为一个布尔值引入第二个ajax调用。这些值会被写入,并且ajax运行后,你会在页面上看到…延迟没有帮助…我肯定错过了其他东西。很抱歉,我的延迟想法没有用!希望你能处理好这一点,JavaScript是驱使一些人喝酒的因素之一。我不建议超时,除非作为最后手段或处理插件。@mwilcox-什么?我不明白nd为什么你的评论是相关的;更不用说setTimeout在JavaScript中是一个非常有价值的函数。你的声明是毫无用处的,因为你没有给出备份的理由或资格。最后的手段是什么?它们在处理插件时有何帮助?你的评论是断章取义的,似乎毫无意义。ajax调用已经启动通过用户操作,在加载整个页面后。整个字符串通过innerHTML操作复制,甚至是我试图从中获取数据的输入标记……很好……这些都是我最喜欢的!