2013-02-15 69 views
2

這是相當棘手的問題,但請耐心等待。 這是javascript DOM的一個衆所周知的功能,如果您有一個表單字段name="something",表單的javascript DOM表示將具有一個something屬性,該屬性是該字段的DOM表示的引用。訪問由字段名稱覆蓋的本機表單屬性?

現在,如果該字段的名稱(「something」)等於表單的原始屬性之一,則它將在javascript對象中佔據其位置。例如,對於一個形式:

<form id="Form"><input name="submit" /></form>

,我們將有:

var s=document.getElementById("Form").submit; // s is the input

,而不是

var s=document.getElementById("Form").submit; // s is the native submit function

是否有訪問本地屬性的方式在這樣的情況下呢?

謝謝。

編輯:只是爲了澄清兩點:

  • 我希望能夠訪問任何財產,而不僅僅是功能
  • 我的意思是這是一個普遍的問題。合乎邏輯的解決辦法不是首先引起名稱衝突。
+0

您可以使用onsubmit嗎?可能是解決問題的方法... – Giles 2013-02-15 17:22:09

+0

@Giles謝謝,但請參閱我的編輯。 – entonio 2013-02-15 18:11:55

回答

1

我不認爲有一種方法來訪問本機函數,如果你有一個名爲'提交'的輸入。我只是跑過了約翰Resig和熊比伯的Secrets of the Javascript Ninja第11章中的同一主題。我想如果有人知道JS和DOM的來龍去脈,那就是他們。

+0

在某種程度上,這是正確的,但請參閱其他答案。 – entonio 2013-02-18 18:59:05

1

下應該做的伎倆:

HTMLFormElement.prototype.submit.call(document.getElementById("Form")) 

它將使用本地方法,並在這頁面上的元素的情況下調用它。

+0

謝謝。我很想接受這個,但我想看到兩件事:1)以便攜的方式訪問原型的提示,2)訪問函數以外的其他屬性的方式,如果可能的話,我擔心它會更棘手在所有。 – entonio 2013-02-15 17:42:25

+0

+1適用於本機功能(儘管不適用於屬性) – entonio 2013-02-18 18:59:34

0

我試圖將此作爲編輯發佈到伊沃的答案,但它被拒絕。這個信息是神祕的,但如果他們的意思是我加了太多原文,那麼我認爲這是錯誤的,因爲我只是想完成它。如果原因不同,請隨時發表評論。有了這個編輯,我會接受伊沃的答案,但如果沒有它,我認爲這是不完整的。

Ivo的答案適用於原生函數,但它不適用於屬性。對於屬性,似乎有很多方法,都是類似的,但沒有一個是完美的,來檢索這個值。我測試了以下的IE9,這是所有我可以在這裏找到,但http://www.quirksmode.org/dom/w3c_core.html#attributes表示行爲是一般,如果不是完全一致:

form.attributes['name']  // node representing the 'name' attribute 

form.getAttribute('name')  // input with name="name" 

form.attributes['submit']  // null 

form.getAttribute('submit') // input with name="submit" 

form.attributes['onsubmit'] // node representing the 'onsubmit' attribute, 
           // whose value is a string 

form.getAttribute('onsubmit') // input with name="submit" 

在此基礎上,似乎(再次,請注意,我沒有測試它徹底):

  • 對於價值屬性,可以使用attributes['attribute name']方法,它應該下來工作IE6。
  • 對於原型函數,可以使用prototype.fn.call方法
  • 對於函數屬性,也許可以檢索屬性的源代碼並使用它,但我寧願不必。
  • 由於getAttribute似乎返回命名的輸入,而不是屬性,至少在IE中,它似乎很沒用。

回答我的原始問題,它看起來像在大多數情況下會有方法來訪問屬性,但它將取決於屬性,最終取決於瀏覽器。