5

在 ASP.NET webforms 和 ASP 3 (Classic ASP) 中,我遇到了一个问题,将表单提交按钮命名为“提交”会“破坏”。下面是渲染的 HTML:

<input type="submit" name="Submit" value="Submit" id="Submit" />

我说“破坏事物”是因为我不确定到底为什么或发生了什么。但症状通常是按下提交按钮有时什么也没做,即它只是不起作用。但有时它确实有效。

事实上,我只是用下面的代码构建了一个快速的一页测试,并且提交工作正常:

<form id="form1" runat="server">
<div>
    <asp:TextBox ID="txtTest" runat="server" />
    <asp:Button ID="Submit" runat="server" Text="Submit" />
</div>
</form>

但是,在过去,这个问题已经出现,并且重命名按钮总是使症状消失。

那么,是否有任何 HTML/HTTP/浏览器专家知道为什么在提交按钮上设置 id="submit" 会导致任何问题?

编辑

这个SO 评论似乎暗示“提交”是一个保留关键字。但是为什么“id”或“name”属性会干扰这个呢?以及如何以会导致冲突的方式实现这个“保留”关键字?

再次感谢

4

4 回答 4

17

form元素有一个名为 的方法submit,但也有表单中的表单元素作为成员。

如果您有一个名为 的表单中的按钮submit,您可以使用 访问它document.form1.submit。但是,由于它与方法同名submit,因此不再有任何方法可以访问该方法。如果您使用该方法提交表单,则将不再有效。

例如,如果您有一个使用 Javascript 提交表单的按钮,则该按钮不起作用:

<input type="button" name="submit" onclick="this.form.submit();" value="try" />

当按钮尝试使用该submit方法时,它将获得对自身的引用(以及尝试调用它时的错误消息,因为按钮不是函数)。

于 2009-05-18T04:46:07.630 回答
2

我会敦促您远离所有 javascript 的 DOM 保留字。在您定义的所有内容或 $ 或其他显然不会与保留字冲突的东西前面使用“my”,您可能会意外地超载并造成严重破坏。

于 2009-05-18T04:49:22.157 回答
0

生成的允许您将事件绑定到对象的代码隐藏是根据您指定的值命名的。

于 2009-05-18T04:45:05.243 回答
0

如果表单提交有问题,只需使用 onsubmit

<form id="form1" runat="server" onsubmit="this.submit()">
<div>
    <asp:TextBox ID="txtTest" runat="server" />
    <asp:Button ID="Submit" runat="server" Text="Submit" Type="submit"/>
</div>
</form>
于 2016-07-07T06:26:20.700 回答