表单onsubmit与提交按钮onclick

时间:2011-08-02 06:40:40

标签: javascript onclick onsubmit

更新 来自@BrendanEich  

  

提交的@mplungjan onclick就是一个按钮;表格onsubmit显然更好。


使用提交按钮的onclick确定是否应该提交表单的原因是什么?

我强烈相信

  1. 在提交前执行某些操作并在发生错误时取消提交,表单的onsubmit事件显然是放置它的地方
  2. 如果您使用提交按钮的onclick,然后决定使用type =“image”,则事件处理程序将在许多浏览器中失败
  3. 如果您将提交更改为按钮,则还必须向onclick事件处理程序添加提交。
  4. 我正在寻找有理由倾向于在表单的onsubmit上使用提交按钮的onclick事件。

    更新:请注意,我个人非常了解表单提交和验证方面的许多问题 例如,通过javascript提交不会触发onsubmit http://jsfiddle.net/mplungjan/3A4Ha/

    <form onsubmit="alert('onSubmit called')">
        <input type="text" value="This will submit on enter but in IE the onclick is not triggered" style="width:100%"/><br/>
        <input type="submit" onclick="alert('Clicked')" />
    </form><br />
    <a href="#" onclick="alert('Submitting by script'); return false">Submit by script will not trigger onsubmit</a>
    

    如果你在我的小提琴中点击输入

    ,IE也不会触发onclick

    历史:

    在这里讨论

    html button not clickable without being disabled

    由于很多 1 多年来看到这在多个浏览器中无效,我非常不喜欢使用提交按钮的onclick, IE的版本。 我列举了一些显而易见的原因,但我相信他们不会说服强硬的用户。

    SO的社区可以帮我把这个钉在墙上,就像钉在学校里一样吗? 也可以随意评论如何以可接受的方式表达这个问题。


    1:自NS2.x和IE3.02以来

2 个答案:

答案 0 :(得分:13)

表单onsubmit是一种更正确的方法,原因很简单,表格也可以使用<ENTER>键提交,而不仅仅是点击提交按钮。

答案 1 :(得分:0)

没有直接理由要在按钮的onclick处理程序上使用from的onsubmit处理程序。人们应该根据意图使用命名事件。

您可以考虑一个场景,该场景有两个动作–一个“发送”动作(如“发送电子邮件”)和一个“保存”(如“草稿”)。前一个动作假定表单以连贯的方式填写,而后一个动作应允许用户保留用户喜欢的任何状态。这使单击处理程序成为确定验证和取消的理想场所。在这种情况下,尚不确定提交事件的相关性。

要使事情变得更加复杂,可以在方案中添加自动保存和乐观并发。

恕我直言,多年来在此事上的尝试和错误导致HTML5标准决定了该问题,而赞成使用button元素。查看按钮的[form *]属性,该属性允许每个按钮分别更改表单操作和方法。