Safari Native Code

blo*_*ilk 2 javascript webkit

是否有人熟悉OS X Safari(版本3和WebKit)中的本机代码?我正在使用Javascript来解析表单中的一些信息,我的一个输入被命名为"tags".尝试使用以下方法获取该元素的值时:

// button is being passed through a function as a DOM object
var tags = button.form.elements["tags"].value;
Run Code Online (Sandbox Code Playgroud)

Safari返回某种功能.我已经得到它提醒像"function tags(){[native code]}"和Node Trees这样的值,但我无法理解为什么我会遇到麻烦.如果有人有线索,请告诉我.我已经通过将输入的名称更改为其他内容并通过迭代所有元素并使用if()语句来确定它是否是我想要的元素来实现它,但我非常好奇为什么Apple会限制使用任何名为"tags"的表单元素...

PS - 它的测试,在Firefox中运行良好.

Bri*_*ell 6

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

document.getElementById('submit-button').form.elements.tags("textarea")[0]
Run Code Online (Sandbox Code Playgroud)

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

var tags = button.form.elements.namedItem("tags").value;
Run Code Online (Sandbox Code Playgroud)

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