猿问

jQuery的$(form).submit();应该吗?不在表单标签内触发onSubmit吗?

jQuery的$(form).submit();应该吗?不在表单标签内触发onSubmit吗?

我有以下内容:

<script type="text/javascript">function CancelFormButton(button) {
    $(button.form).submit();}</script><form onsubmit="alert('here');"><input type="button" value="Cancel" onClick="CancelFormButton(this);" /></form>

当我单击“取消”按钮时,不会触发来自表单标签的onsubmit。

该行将成功提交表单:$(button.form).submit();但是跳过alert('here');form标记中onsubmit中的。

这是正确的还是我做错了什么?

顺便说一句,在这种情况下,我需要此功能,但是我只是想知道是否在触发onsubmit的浏览器中遇到问题。


摇曳的蔷薇
浏览 1317回答 3
3回答

互换的青春

抱歉,误解了您的问题。根据Javascript-在调用form.submit()时捕获onsubmit:最近有人问我:“为什么使用JavaScript提交表单时,为什么不会触发form.onsubmit事件?”答案:当前的浏览器不遵守html规范的这一部分。该事件仅在用户激活时触发,而在代码激活时不触发。(强调)。注意:&nbsp;“由用户激活”还包括单击提交按钮(可能包括回车键的默认提交行为,但我没有尝试过)。我相信,如果您(使用代码)单击提交按钮,也不会触发该事件。

明月笑刀无情

我想在某些情况下希望这种行为是合理的,但是我认为不触发表单提交的代码应该(始终)是默认行为。假设您想通过以下方式捕获表单的提交$("form").submit(function(e){ &nbsp;&nbsp;&nbsp;&nbsp;e.preventDefault();});然后对输入进行一些验证。如果代码可以触发提交处理程序,则您永远都不能包含$("form").submit()在此处理程序中,因为这将导致无限循环(将调用SAME处理程序,以防止提交,验证和重新提交)。您需要能够在提交处理程序中手动提交表单,而无需触发相同的处理程序。我意识到这并不能直接回答问题,但是此页面上还有许多其他有关如何破解此功能的答案,我认为需要指出(而且评论太长了)。
随时随地看视频慕课网APP
我要回答