2

jquery 検証プラグインを使用して、さまざまな機能を実行するための複数の送信ボタンがあるページのフォームを検証および送信しています。

1 つの送信ボタンは $post メソッドを使用して実行され、もう 1 つのボタンは標準アクション メソッドを使用します。

(私の用語が間違っていたら、私に固執してください)

私が抱えている問題は、最初のボタンを使用してフォームを送信し、2 番目のボタンを使用して再試行すると、2 番目の送信で最初のアクションを再度実行しようとすることです。

これが私のコードで、うまくいけば物事をより明確にします...

<form id="myForm" action="add.php">
<input type="submit" id="myfunction" />
<input type="submit"​ id="add" />
​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​&lt;input type="text" name="myvalue" />
</form>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

そして私の検証コード...

$("#myForm input[type=submit]").click(function(e) {
        if (e.target.id == 'myfunction') {
            $("#myForm").validate({
                submitHandler: function(form) {
                    $.post('myfunctionpage.php', $("#myForm").serialize(), function(data) { });
                }
            });
        } else if (e.target.id == 'add') {
            $("#myForm").validate({
                rules: {
                    name: {
                        required: true,
                    }
                }
            });
        }

    });​
4

3 に答える 3

1

コードを 2 つのセグメントに分けてみませんか?

$("#myfunction").click(function(e) {

            $("#myForm").validate({
                submitHandler: function(form) {
                    $.post('myfunctionpage.php', $("#myForm").serialize(), function(data) { });
                }
            });
        } 

$("#add").click(function(e) {
            $("#myForm").validate({
                rules: {
                    name: {
                        required: true
                    }
                }
            });
        }
于 2012-05-07T00:53:23.977 に答える
1

$.post ケースでフォームの送信を停止する必要があります。クリック イベント ハンドラーから false を返してみてください。これにより、イベントがフォームにバブリングして送信されるのを防ぐことができます。

個人的にsubmitは、ボタンのクリック イベントではなく、フォーム要素のイベントにフックします。その理由は、多くのユーザーがテキスト ボックスにカーソルを置いてから Enter キーを押してフォームを送信するためです。クリック イベントは発生せず、コードはバイパスされます...

また、検証プラグインを使用してからしばらく経ちましたが、フォームが送信された後に validate() を呼び出すのは間違っていると思います。ドキュメントを確認して適切に使用してください。

于 2012-05-07T03:15:02.587 に答える
1

誰かがそれを探している場合に備えて。最初の送信後は単純に $("#myForm").validate().destroy(); を使用します。「フォームデータ」をクリアするため。

https://jqueryvalidation.org/Validator.destroy/

于 2017-10-06T12:38:13.827 に答える