Javascript Safari本机代码

Javascript Safari本机代码,javascript,webkit,Javascript,Webkit,有人熟悉OSXSafari(版本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]}”

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


附带说明-这是一个测试,在firefox中运行良好。

[本机代码]
只是意味着它是一个内置于浏览器中的函数,而不是用JavaScript编写的<代码>标记DOM的WebKit扩展,允许您按标记名获取表单中的元素列表。例如,如果我在StackOverflow页面上运行此操作,我会得到答案文本区域:

document.getElementById('submit-button').form.elements.tags("textarea")[0]
问题在于,JavaScript中集合的索引也可以访问任何对象属性(包括方法),因此当您尝试访问命名元素
标记
时,取而代之的是WebKit定义的
元素
对象上的方法。幸运的是,有一个解决办法;您可以通过
id
name
调用元素列表来获取项目:

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

编辑:请注意,即使在其他浏览器中,如果需要检索名为
长度
之类的元素,通常也最好使用
namedItem
;否则,如果您使用
[]
操作符将它们用作索引,您将获得内置方法
长度
,而不是您的元素。

有趣的是,我在Safari中从未遇到过这个问题,但我只是在IE9中遇到了它。幸运的是,同样的解决方案在那里奏效了。哎呀,我发现了一个陷阱。如果您尝试使用多个元素(一组复选框或单选按钮)访问表单元素,那么namedItem将在Safari中返回一个元素数组,但只返回IE9和Firefox 4中的第一个元素(到目前为止,我只检查了这两个版本)。因此,如果您使用复选框或单选按钮,则这不是元素[]的替代品,元素[]总是返回元素数组。