有人熟悉 OS X Safari(版本 3 和 WebKit)中的本机代码吗?我正在使用 Javascript 来解析表单中的一些信息,我的输入之一名为“标签”。当尝试使用以下方法获取该元素的值时:
// button is being passed through a function as a DOM object
var tags = button.form.elements["tags"].value;
Safari 返回某种函数。我已经让它提醒诸如“function Tags() { [native code] }”和节点树之类的值,但我只是不明白为什么我会遇到麻烦。如果有人有线索,请告诉我。我已经通过将输入的名称更改为其他名称以及迭代所有元素并使用 if () 语句来确定它是否是我想要的元素来使其工作,但我非常好奇为什么 Apple 会这样做限制使用任何名为“标签”的表单元素...
附: - 经过测试,在 Firefox 中运行良好。
[native code]
只是意味着它是浏览器内置的函数,而不是用 JavaScript 编写的。tags
似乎 http://trac.webkit.org/browser/trunk/WebCore/html/HTMLCollection.cpp#L453DOM 的 WebKit 扩展,允许您通过标签名称获取表单中的元素列表。例如,如果我在 StackOverflow 页面上运行此命令,我会得到答案文本区域:
document.getElementById('submit-button').form.elements.tags("textarea")[0]
问题是 JavaScript 中集合的索引也会访问任何对象属性(包括方法),因此当您尝试访问命名元素时tags
,你会得到上面的方法elements
WebKit 定义的对象。幸运的是,有一个解决方法;你可以打电话namedItem http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-21069976在元素列表上获取项目id
or name
:
var tags = button.form.elements.namedItem("tags").value;
edit:请注意,使用它可能更好namedItem
一般来说,即使在其他浏览器中,如果您需要检索名为的元素item
or length
或类似的东西;否则,如果您将它们用作索引[]
运算符,您将获得内置方法item
or length
而不是你的元素。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)