2009-04-24 52 views
2

是否有人熟悉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中正常工作。

回答

6

[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