我有以下内容:

<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'); 在表单标记中的 onsubmit 内。

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

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

有帮助吗?

解决方案

抱歉,误解了你的问题。

根据 Javascript - 调用 form.submit() 时捕获 onsubmit:

最近有人问我:“当我使用JavaScript提交表格时,张开事件为什么不被解雇?”

答案:当前的浏览器不遵守HTML规范的这一部分。该事件仅在用户激活时发射 - 并且在被代码激活时不会发射。

(强调已添加)。

笔记: “由用户激活”还包括点击提交按钮(可能包括回车键的默认提交行为,但我还没有尝试过)。我相信,如果您(使用代码)单击提交按钮,它也不会被触发。

其他提示

解决办法将解决由@Cletus发现的问题。

function submitForm(form) {
    //get the form element's document to create the input control with
    //(this way will work across windows in IE8)
    var button = form.ownerDocument.createElement('input');
    //make sure it can't be seen/disrupts layout (even momentarily)
    button.style.display = 'none';
    //make it such that it will invoke submit if clicked
    button.type = 'submit';
    //append it and click it
    form.appendChild(button).click();
    //if it was prevented, make sure we don't get a build up of buttons
    form.removeChild(button);
}

将工作在所有现代浏览器。点击将整个标签的工作/催生子窗口(是的,即使在IE <9)。
,是香草!

只要它传递一个DOM引用的表格元素,它会确保所有连接听众,所述的onsubmit,和(如果它不是由防止然后)最后,提交表单。

我的简单的解决方案:

$("form").children('input[type="submit"]').click();

这是我的工作。

我想这是合理的,希望在某些情况下,这种行为,但我认为不是代码触发表单提交应(总是)是默认的行为。假设你想赶上一个表单的提交与

$("form").submit(function(e){
    e.preventDefault();
});

和然后执行对输入一些验证。如果代码可能会引发提交处理程序,你永远无法包括

$("form").submit()

此处理程序,因为它会导致无限循环内(同一处理程序将被调用,防止提交,验证,并重新提交)。您需要能够手动提交提交处理程序内的形式,而不会触发相同的处理程序。

我知道这并不直接回答这个问题,但也有很多这页有关该功能如何被黑客攻击其他的答案,我觉得这需要指出的(和它太长的评论)。

触发器(“提交”)不work.beacuse的onSubmit方法不被解雇。 下面的代码对我的作品,使用这种代码时调用的onSubmit方法:

$("form").find(':submit').click();

尝试触发()事件在你的函数:

$("form").trigger('submit'); // and then... do submit()

相反

$("form").submit()

尝试此

 $("<input type='submit' id='btn_tmpSubmit'/>").css('display','none').appendTo('form');
 $("#btn_tmpSubmit").click();

我薮年前发现了这个问题。

最近,我试图“改写”提交方法。下面是我的代码

window.onload= function (){
for(var i= 0;i<document.forms.length;i++){
    (function (p){
        var form= document.forms[i];
        var originFn= form.submit;
        form.submit=function (){
            //do something you like
            alert("submitting "+form.id+" using submit method !");
            originFn();
        }
        form.onsubmit= function (){
            alert("submitting "+form.id+" with onsubmit event !");
        }
    })(i);


}

}

<form method="get" action="" id="form1">
<input type="submit" value="提交form1" />
<input type="button" name="" id="" value="button模拟提交1" onclick="document.forms[0].submit();" /></form>

它确实在IE中,但在其他浏览器未能出于同样的原因为“克莱图斯”

要解决此最简单的解决方案是创建“临时”与类型输入提交和触发点击:

var submitInput = $("<input type='submit' />");
$("#aspnetForm").append(submitInput);
submitInput.trigger("click");
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top