1

多くの jQuery を使用している大規模なアプリケーションがあり、今日のテストで正しく検証されない 1 つのページに出くわしました。ページのコピーを保存し、問題が発生している単一のフィールドを検証するためのコードを除いて、他のすべての jQuery を削除しました。

次のコードでは、完全に機能します。

<script type="text/javascript">
    $(document).ready(function () {
        $('#btnSave').click(function (e) { validateRegisterForm(e); });
    });

    function validateRegisterForm(e) {

        $('#EMasterForm').validate();
        alert('validation result is : '+ $('#EmasterForm').valid());
        $('#txtMaxCommute').rules                 
            ('add', { 
                required: true, 
                minlength: 2,
            }); // end of rules(add) function call

            if ($('#EmasterForm').valid() == false) {
                e.preventDefault();
        }
    }


</script>

しかし、アラートをコメントアウトすると、機能しません。また、アラートには常に「true」の値が表示されます。

これは私にはばかげた質問のように思えます。しかし、時計仕掛けのように検証する他の 50 ページがあります。そして、私はこれに不足しています。あらゆる種類の操作にjqueryをどこでも使用しています。しかし、この1ページは機能しません。

アラートが機能する理由を誰かが明らかにすることはできますか? これに答える人に懲らしめられてうれしいです:)

前もって感謝します!

4

2 に答える 2

2

送信ボタンとして btnSave があると仮定します。

送信ボタンの検証 onclik をバインドしようとしています。そのため、クリック送信イベントの時点で、検証を行っていないため、.valid() を再度呼び出す必要があります。

$('#EMasterForm').validate(); を移動することをお勧めし ます。およびルール クリックの外側に関連するコードがあり、クリックイベントで何かをバインドする必要はありません。

以下を実行するだけで完了です。

 $(document).ready(function () {
        $('#EMasterForm').validate();
        $('#txtMaxCommute').rules                 
            ('add', { 
                required: true, 
                minlength: 2,
            }); // end of rules(add) function call
 })
于 2012-07-12T02:44:49.370 に答える
0

jQuery 検証関数と他のすべての関数は、DOM の準備ができたときに初期化する必要があります。上記のように $('#YOUR_FORM_ID').validate(); Document ready で呼び出す必要があります。デモをチェックしてください。きっと役に立ちます。

http://jquery.bassistance.de/validate/demo/

于 2012-07-12T07:16:44.753 に答える