Javascript在JSFiddle中工作 - 浏览器说“未定义”

时间:2011-10-12 05:43:09

标签: javascript forms validation

我之前在这里发布并收到了很好的答案 - 但是在进一步使用时,代码显示Firebug中的错误并且在测试中无法正常工作。

Original question

JSFiddle solution

Firebug错误显示:document.getElementsByName(“licenseAgreement”)[0]未定义(第1行)

任何帮助都会很精彩。

1 个答案:

答案 0 :(得分:1)

无数问题。最可能的主要问题是您在页面加载之前运行代码,因此licenseAgreement对象尚未生效。以下是您应该更改的内容摘要。

首先,由于多种原因,此代码在IE9之前无法在IE中运行。 IE中没有正确支持getElementsByName,IE9之前根本不支持addEventListener。您必须在其他浏览器中使用attachEvent与IE和addEventListener。请参阅下面的jsFiddle以获取执行此操作的代码。

第二次,我建议您更改为document.getElementById(),并为您的目标元素提供id值,而不是name值。这将为您提供所需的确切元素,并且跨浏览器支持。请参阅下面的jsFiddle,了解如何使用getElementById

第三次,您没有向我们展示实际的工作页面,但我的猜测是您在页面加载完成之前运行代码以附加eventListener意味着它找不到licenseAgreement对象,因为它尚未被解析并加载到页面中。只是猜测,因为您没有向我们展示失败的实际页面。您可以将初始化代码移动到HTML正文的末尾,也可以在页面加载后通过挂钩页面加载事件并从那里调用它来调用它。您的jsFiddle可能有效,因为您在jsFiddle中指定您不希望代码在页面加载之前运行(jsFiddle功能)。