我有一个表单onsubmit触发器和一个确认启动框,单击了表单提交按钮。如果用户说是,请在启动箱中确认我提交表单。我的问题是在用户说“是”之前onsubmit触发,并且在引导箱中调用form.submit()
时不再触发。
<html>
<form>
<!-- something here -->
<button type="submit"></button>
</form>
</html>
<script>
form.on('submit', function(){
//do something here (I)
}
form.validate({
submitHandler: function (form) {
finalConfirm(form); (II)
}
});
function finalConfirm(form){
confirm('message', function (confirmed) {
if(confirmed) form.submit() (III)
})
}
</script>
我希望//do something here (I)
在if(confirmed) form.submit() (III)
之后执行,或者至少在之前和之后都执行,但是只能在它之前执行(如我在代码中所示)
答案 0 :(得分:3)
直接在submit
元素(DOM元素,而不是jQuery包装器)上调用form
不会触发submit
处理程序。 validate插件通过您的submitHandler
的参数是DOM元素,而不是它的jQuery包装器(根据this documentation)。
在jQuery包装器上为submit
元素调用form
是触发submit
处理程序(至少是jQuery附带的处理程序)。因此,如果您希望form.submit()
中的finalConfirm
触发您的提交处理程序,请为其创建一个jQuery包装器:
$(form).submit();
(在那里,或者在submitHandler
传递给finalConfirm
之前。)
请确保您不会陷入无尽的循环。 :-)