Safari本机代码

问题描述:

是否有人熟悉OS X Safari(版本3和WebKit)中的本机代码?我使用Javascript来解析表单中的一些信息,我的一个输入被命名为“tags”。当试图使用该元素的值时:Safari本机代码

// button is being passed through a function as a DOM object 
var tags = button.form.elements["tags"].value; 

Safari返回某种功能。我已经得到它提醒像“功能标签(){[本机代码]}”和节点树,但我不明白为什么我会遇到麻烦。如果有人有线索,请告诉我。我已经通过将输入的名称更改为其他内容来工作,并且通过迭代所有元素并使用if()语句来确定它是否是我想要的元素,但我非常好奇为什么Apple会限制使用任何名为“标签”的表单元素...

PS - 这是测试,并在Firefox中正常工作。

[native code]只是表示它是一个内置于浏览器的函数,而不是用JavaScript编写的。 tagsappears to be DOM的WebKit扩展允许您通过标记名称获取表单中元素的列表。举例来说,如果我在StackOverflow的页面上运行,我得到了答案文本区域:

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

的问题是,一个索引中的JavaScript集合也可以访问任何对象的属性(包括方法),所以当你尝试访问您的指定元素tags,您将获得WebKit定义的elements对象上的方法。幸运的是,有一种解决方法;您可以拨打元素列表上namedItem通过idname拿到一个项目:

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

编辑:请注意,它可能会更好,即使在其他浏览器使用一般namedItem,如果你需要检索元素名为itemlength或类似的东西;否则,如果您将它们用作[]运算符的索引,则将获得内置方法itemlength而不是您的元素。

+0

工作就像一个魅力,谢谢! – bloudermilk 2009-04-25 00:28:41