0

我在一个网站上工作并且遇到了这个问题,所以我尽可能地简化了它。

索引.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>

测试.js:

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

当我提交表单时,我看到:

str=[对象 HTMLInputElement]

当我将 name 的值更改为“id”以外的任何值时,我看到了预期的

str=myForm

如果我在代码中切换“name”和“id”的所有实例,我会得到完全相同的行为。换句话说,它似乎不是任何一个属性的特定限制,而是更普遍的东西。

我在 OS X 10.8 上运行 MAMP;在 Firefox 22.0 和 Chrome 版本中遇到问题。28.

提前致谢

4

3 回答 3

0

on 表单元素通过其.id名称访问表单字段。要获取 ID 属性,请使用this.getAttribute('id').

于 2013-08-19T03:19:12.617 回答
0

当您将输入命名为“id”时,log(this.id) 将转换为 log(myForm.id),其中 id 是 myForm 的一个属性,它实际上是输入子元素。这由出现的 [object HTMLInputElement] 类名指示。

当您将输入子控件命名为其他名称时,this.id 现在指的是表单 id 属性。

当您将“id”与“name”切换时,同样的逻辑也适用,因为您可以通过控件的名称或 id 来引用控件。

于 2013-08-19T03:23:30.470 回答
0

好吧,那是因为this.id被解释为“具有名称的元素id属于表单”,这就是您通过参数接收 [object HTMLInputElement] 的原因。当没有这样的输入时(即当你以不同的方式命名它时),this.id被解释为表单 id

于 2013-08-19T03:27:35.970 回答