2013-08-19 24 views
0

我正在一個網站上工作,遇到了這個問題,所以我儘可能簡化了它。HTML表單onsmit傳遞this.id;產生意想不到的價值

的index.html:

<html> 
<head></head> 
<body> 
    <script type="text/javascript" src="test.js"></script> 

    <form id="myForm" onsubmit="log(this.id)"> 
     <input name="id"> 
    </form> 
</body> 
</html> 

test.js:

function log(str){ 
    console.log("str=" + str); 
} 

當我提交表單,我看到:

STR = [對象HTMLInputElement]

和當我的名字的值更改爲任何東西,但「身份證」,我看到預期

海峽= myForm的

我得到完全相同的行爲,如果我轉「名」和「的所有實例ID「在代碼中。換句話說,它似乎不是任何屬性的特定限制,而是更一般的東西。

我在OS X 10.8上運行MAMP;在Firefox 22.0和Chrome版本中遇到問題。 28.

由於在形式預先元素

回答

0

.id通過其名稱訪問的表單字段。要獲取ID屬性,請使用this.getAttribute('id')

0

當您給輸入名稱「id」時,log(this.id)轉換爲log(myForm.id),其中id是myForm的屬性,它實際上是輸入子元素。這由出現的[object HTMLInputElement]類名指示。

當您將輸入子控件命名爲其他內容時,this.id現在引用表單id屬性。

當您將「id」切換爲「name」時,同樣的邏輯適用,因爲您可以通過其名稱或ID引用控件。

0

嗯,那是因爲this.id被解釋爲「與名id屬於形式元素」,這就是爲什麼你通過參數接收[對象HTMLInputElement。當沒有這樣的輸入時(即,當您以不同的方式命名時),this.id被解釋爲,其格式爲ID