2

有人熟悉 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 () 语句来确定它是否是我想要的元素来使其工作,但我非常好奇为什么苹果会限制使用任何名为“标签”的表单元素...

PS - 这是测试并且在 Firefox 中运行良好。

4

1 回答 1

6

[native code]只是意味着它是内置在浏览器中的函数,而不是用 JavaScript 编写的。tags 似乎是DOM 的 WebKit 扩展,允许您通过标签名称获取表单中的元素列表。例如,如果我在 StackOverflow 页面上运行它,我会得到答案文本区域:

document.getElementById('submit-button').form.elements.tags("textarea")[0]

问题是 JavaScript 中集合的索引也会访问任何对象属性(包括方法),因此当您尝试访问命名元素tags时,您会得到elementsWebKit 定义的对象上的方法。幸运的是,有一个解决方法;您可以调用元素列表以通过或namedItem获取项目:idname

var tags = button.form.elements.namedItem("tags").value;

编辑:请注意,namedItem即使在其他浏览器中,它也可能更好地使用,以防您需要检索名为itemlength类似的元素;否则,如果您将它们用作[]运算符的索引,您将获得内置方法itemlength代替您的元素。

于 2009-04-25T00:21:27.960 回答