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编写的。 tags
appears to be DOM的WebKit扩展允许您通过标记名称获取表单中元素的列表。举例来说,如果我在StackOverflow的页面上运行,我得到了答案文本区域:
document.getElementById('submit-button').form.elements.tags("textarea")[0]
的问题是,一个索引中的JavaScript集合也可以访问任何对象的属性(包括方法),所以当你尝试访问您的指定元素tags
,您将获得WebKit定义的elements
对象上的方法。幸运的是,有一种解决方法;您可以拨打元素列表上namedItem
通过id
或name
拿到一个项目:
var tags = button.form.elements.namedItem("tags").value;
编辑:请注意,它可能会更好,即使在其他浏览器使用一般namedItem
,如果你需要检索元素名为item
或length
或类似的东西;否则,如果您将它们用作[]
运算符的索引,则将获得内置方法item
或length
而不是您的元素。
工作就像一个魅力,谢谢! – bloudermilk 2009-04-25 00:28:41