2013-08-19 21 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