javascript - 这行代码的作用是什么? var foo = documentGetElementById( form_name ).elements;

标签 javascript internet-explorer-8 internet-explorer-9

注意:IE8和IE9有所不同。

   var foo = documentGetElementById( form_name ).elements;

在 IE 9 中,foo 获取一个元素数组,其中包含用户提交的值,以便可以像这样迭代它们。

for ( index in foo )
{
    if( foo[index].value === 'element_value' ) 
    {
        return 1;
    }
}

在 IE 8 中我不知道 foo 里面有什么。但我无法再循环遍历元素以从表单中提取用户输入。 IE 8 调试器报告 foo[element] 为 NULL 或不是对象。

在这两种情况下,我都不知道它应该做什么(而不是它实际做什么)。

最佳答案

不要使用这样的for ... in for 循环。相反:

    for (var index = 0; index < foo.length; ++index) {
      if (foo[index].value === 'whatever') { return 1; }
    }

循环的for ... in形式用于遍历对象的属性。实际上,您在这里得到的是一个对象,但更重要的是它的行为更像是一个数组。 (实际上,它是一个 NodeList HTMLCollection,但对于内容遍历,它可以被视为数组。)按数字索引迭代的优点是,您可以避免绊倒真正不存在的对象的属性。其概念内容的一部分。

您的另一个问题是在索引表达式中使用“element”;我不知道“元素”是什么/是什么,但您想使用迭代器变量。

编辑 — 我所认为的“元素”(NodeList)和它实际的(HTMLCollection)之间的区别在于,集合 API 既有数字索引的外观,也有名称索引的外观。问题是,如果您以某种方式知道表单外部的名称,那么按名称访问方法就有意义了。然而,对于你正在做的事情,我仍然会使用数字迭代器,因为否则事情会变得有点困惑(对我来说)。可能是我太偏执了,所以也许有更有见识的人会发表评论或回答。在我看来,浏览器使来自 DOM 规范的 IDL 定义在 JavaScript 中工作的方式是一个有些不稳定的领域。

关于javascript - 这行代码的作用是什么? var foo = documentGetElementById( form_name ).elements;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9284322/

相关文章:

javascript - 属性选择器、JavaScript 和 IE8

ios - 令人困惑的 SSL 证书错误 - 是否允许端口号?

css - execCommand 未在 IE8/9 中禁用 'Shrink To Fit' - 横向

Javascript 侧滚动条

javascript - jquery循环条件语句

javascript - 未捕获错误 : THREE. 四元数 : . setFromEuler() 现在需要欧拉旋转而不是 Vector3 和顺序

javascript - 用Grails设置React

javascript - Angular 1.2 的 debugInfoEnabled

javascript - IE 8 中没有灯箱

php - IE9L自动将文档模式更改为IE7