4

我有这样的代码

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>
<script type="text/javascript">
    $(function(){

        $("#main_form").submit(function(){
            alert("submitting");
        });

        $("#main_form").on("submit", function(){
            alert("ON submitting");
        });


        $("#lnk").click(function(){
            //$("#main_form").submit(); //when submitting like this - event is triggered
            document.getElementById("main_form").submit();  //no submitting alerts are triggered
        });
    });
</script>

<h4><?php echo time(); ?></h4>

<form id="main_form" action="">
    <input type="text" value="x"/>
    <input type="submit" value="submit-btn"/>
</form>

<a id="lnk" href="#">test submit js</a>

当我单击提交按钮时,我有 2 个警报上升,因此触发了 onsubmit 事件,但是当我单击链接 #lnk 时,该链接必须从普通 js 中提交,例如

 document.getElementById("main_form").submit();

我只收到表单提交但没有警报。但是当我取消注释通过 jquery 提交时

$("#main_form").submit();

警报又回来了。谁能解释我为什么会这样?

PS我有遗留代码以纯js提交表单,我不想更改它,所以我决定只绑定onsubmit事件并在自定义函数中执行一些检查,但我遇到了如上所述的问题

4

2 回答 2

3

调用 submit() 方法时,浏览器不会触发元素的 onsubmit 事件。当您使用jQuery().trigger("submit")jQuery 时,它会为您调用本机submit()方法,但由于它没有“看到”本机事件并且本机submit()不会触发本机 onsubmit,因此不会调用它。但是,这是浏览器的怪癖,超出了 jQuery 的范围。

于 2013-07-01T13:01:34.337 回答
0

我认为问题出在事实事件仅在我们从用户那里获得迭代时才被调用,这意味着当它们从代码中激活时它们不能被自动调用。

顺便说一句,以下代码是相同的:

$("#main_form").submit(function(){
    alert("submitting");
});

$("#main_form").on("submit", function(){
    alert("ON submitting");
});

submit当事件发生时,它们都会被触发。

你可以检查这个:http: //james.padolsey.com/jquery/#v=git&fn=jQuery.fn.submit

于 2013-07-01T12:50:05.383 回答