3

jQuery検証を使用するプロジェクトがあります。これが私のコードです:

<script type="text/javascript" src="Scripts/jquery-1.5.1.js"></script>
<script type="text/javascript" src="Scripts/jquery.validate.js"></script>
<form action="/" id="MyForm" onsubmit="greeting()">
    <input type="checkbox" value="val1"  name="dner" />
    <input type="submit" value="Submit" />
</form>
<script type="text/javascript">
function greeting() {
    return $("#MyForm").valid();
}
$(document).ready(function () {
    $("#MyForm").validate({ onsubmit: true }); //If comment this code line, it work!!!
    $.validator.addMethod("MyFunction", function (value, element) {
        if ($("input:checked").length > 0) { return true } else { alert("Пустое поле"); return false; }
    },
    "");
    $("#MyForm").rules("add", { dner:{ MyFunction :true}});
});
</script>

1行のコードにコメントするとうまくいきます。私のプロジェクトでは、検証のための新しいルールを設定しており、それを作り直すことはできないため、これは非常に重要です。新しいルールを既存のルールに追加するにはどうすればよいですか?

4

1 に答える 1

5

あなたのコード:

//If comment this code line, it work!!!
$("#MyForm").validate({ onsubmit: true }); 

その行全体をコメントアウトすると、プラグイン の初期化メソッドが削除されます!

どちらの場合もコードが機能しないため、これは論点です。ここまたはここを参照してください。

次の問題を修正する必要があります。


1) onsubmit: trueは既にデフォルト の動作であるため、これを に設定するとtrue、プラグインが壊れます。ボタンをクリックしたときに検証を行う場合は、このオプションをそのままにしておきsubmitます。

のドキュメントを参照してくださいonsubmit:

onsubmit (デフォルト: true):
送信時にフォームを検証します。false検証に他のイベントのみを使用するには、に設定します。関数に設定して、検証を実行するタイミングを自分で決定します。ブール値trueは有効な値ではありません


2) あなたのコード: $("#MyForm").rules("add"....

.rules()メソッドをにアタッチすることは想定されていませんform。要素にのみアタッチしfieldます...

$('input[name="dner"]').rules("add", {
    MyFunction: true
});

ドキュメントを参照してください。

このメソッドを一度に複数のフィールドに適用するには、jQuery .each()...

$('input[type="checkbox"]').each(function() {
    $(this).rules("add", {
        MyFunction: true
    });
});

submit3) インラインハンドラ は必要ありません: onsubmit="greeting()". jQuery を使用する場合、インライン JavaScript はまったく不要です。さらに、submitハンドラーはプラグインの組み込みハンドラーに干渉しますsubmitsubmitこのプラグインを使用しているときにイベントで何かを実行する必要がある場合は、submitHandlerコールバック関数を使用してください...

submitHandler: function(form) {
    // fire this code when a valid form is submitted
    return false;  // prevent default form action, e.g. when using ajax()
}

フォームが有効でないときにコードを起動する必要がある場合は、invalidHandlerコールバックを使用してください...

invalidHandler: function(event, validator) {
    // fire this code when an invalid form is submitted
}

例については、ドキュメントを参照してください。


4)カスタムメソッドを凝縮できます...

$.validator.addMethod("MyFunction", function (value, element) {
   return ($("input:checked").length > 0) 
}, "Пустое поле");

メッセージalert()よりも使用したい場合は、元に戻すことができます。ただし、モダンなデザインの一部としてlabelを使用することはお勧めしません。alert()


すべての変更が適用されたデモ: http://jsfiddle.net/sqKta/

于 2013-09-25T17:39:57.877 に答える