为什么命名你的HTML表单提交按钮“提交”中断了什么?

时间:2009-05-18 04:26:04

标签: html form-submit http-post form-post

在ASP.NET webforms和ASP 3(经典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 comment似乎暗示“submit”是一个保留关键字。但为什么“id”或“name”属性会与此相关?这个“保留”关键字如何以导致冲突的方式实现?

再次感谢

4 个答案:

答案 0 :(得分:15)

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

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

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

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

答案 3 :(得分: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>