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 に答える