【问题标题】:Javascript can't access document: null or undefinedJavascript 无法访问文档:null 或 undefined
【发布时间】:2011-12-04 04:57:42
【问题描述】:

document.getElementsByName('name').value 返回undefined。我不知道为什么会这样。

我正确地包含了 .js 文件,Firebug 在我的代码中没有发现任何错误,并且代码在第一行或第二行内失败,因为每次我调用上述函数时,它都会返回 undefined。这让我完全糊涂了。

这是我包含文件的方式:

    <script type="text/javascript" src="new.js"></script>

这是到达函数调用返回的第一个未定义值所需的所有代码:

    function myfunction() {
        var myvar = document.getElementsByName('myElement').value;

...那时我得到未定义的变量。我用来触发脚本的按钮使用如下代码:

    <button type="button" onclick="myfunction()">MyButton</button>
  1. 我所使用的按钮类型是否影响脚本可用的信息?
  2. 如何找出document.getElementsByName() 返回undefined 的原因?
  3. Javascript document 对象对于从另一个文件导入的脚本是否存在任何范围问题?

抱歉,这是一个愚蠢的问题。我对 Javascript 很陌生。

编辑:感谢 Mike Samuel 的回答。这就像一个魅力一样固定它,我想知道为什么我以前不知道这个?我应该尽可能多地看到 getElementsByName() 表明返回的值不止一个......

【问题讨论】:

  • document.getElementByName 不是跨浏览器,所以是的,它可能会返回奇怪的值或根本没有返回值。分配 ID 或通过标签名称获取元素可能会更容易。
  • @Lime - 没有“getElementByName”,您寻求的方法是 getElementsByName,每个支持 DOM 1 的浏览器都有(自 Navigator 2 以来几乎所有浏览器都有) .
  • @RobG 拼写错误 =) 无论如何,IE 9 仍然没有得到 getElementsByName correct。我绝对不会称这种古怪的行为跨浏览器。如果没有更多关于 document.getElementsByName("myElement") 的上下文,他可能会遇到浏览器错误。
  • 下面列出的所有三个函数都在 W3C dom1 标准中。
  • @Lime - 如果你坚持 HTML 标准(即 HTML 4.01)并且只在指定有名称的元素上使用名称(其中有 14 个),并且没有名称在某些与其他元素的id相同的元素上,则它是可靠的。如果您希望浏览器支持 HTML5 的功能,这不是标准(它是工作草案)并且没有被任何浏览器完全实现,那么您将遇到问题。

标签: javascript scope globals


【解决方案1】:

getElementsByName 返回一个包含元素的类数组对象,而不是一个元素。在.value 之前粘贴[0]

var myvar = document.getElementsByName('myElement')[0].value;

【讨论】:

    【解决方案2】:

    Javascript 有 3 种不同的函数适用于这种情况。

     ___________________________________________________________________________________
    |getElementById()       | Accesses the first element with the specified id.          |
    |                       | Returns a single element, as ID's are unique in a document |
    |_______________________|____________________________________________________________|
    |getElementsByName()    | Accesses all elements with a specified name.               |
    |                       | Returns an array of all elements marked with this name.    |
    |                       | Used like a CSS class(not unique).                         |
    |_______________________|____________________________________________________________|
    |getElementsByTagName() | Accesses all elements with a specified tagname.            |
    |                       | Returns an array of all elements with a given tag.         |
    |_______________________|____________________________________________________________|
    

    当你想要一个特定的单个元素时使用 ID,任意组的名称(作为具有索引的数组访问)和当你想要所有相同类型的元素时使用标记(也通过索引数组)。 祝你好运,编码愉快;-}

    【讨论】:

      猜你喜欢
      • 2023-01-20
      • 2021-09-25
      • 1970-01-01
      • 1970-01-01
      • 2021-07-29
      • 2020-07-19
      • 2020-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多