1

私はこのhtmlを持っています

<form class="validate"><!-- various inputs here --></form>

そしてこのjs

$("form.validate").validate({
  errorPlacement: function(error, element) {
    error.appendTo(element.closest("div.error_box"));
  },
  errorElement: "div",
  errorClass: "form_error"
});

次に、特定のイベント(つまり、ボタンをクリック)の後で、上記のような新しいフォームを(ajax経由で)ロードするとします。または、コードのその部分を完全に更新したため、フォームが新しくなり、検証が失われました。

ajax呼び出しの成功コールバックでvalidate()を再度呼び出さずに、検証をアタッチ/再アタッチしようとしています。

「古い」jqueryライブメソッドに少し似ています。

.onなんらかの方法で使用できますか?メソッド「on」が「イベント」を新しい要素にバインドできる場合、検証全体を適用できないのはなぜですか?

4

2 に答える 2

1

コメントに従って編集し、OPを編集しました

「後で表示される要素 (つまり 、新しいフォーム) に jquery validate をアタッチする最もスマートな方法は何ですか?」

まったく新しいフォームの作成/読み込みについて話している場合、AFAIK、これが唯一の方法です....validate()新しいフォームを読み込み/作成した直後に呼び出します...

$('#my_NEW_form').validate({
    // your options
});

すべてのフォームが同じオプションを共有している場合は、setDefaultsメソッドを一度使用して、何度も宣言することを避けることもできます...

$.validator.setDefaults({ 
    // your repeated options
});

参照: http://docs.jquery.com/Plugins/Validation/Validator/setDefaults#defaults


編集2:

.on何らかの方法で使用できますか?メソッド「on」が「イベント」を新しい要素にバインドできる場合、検証全体を適用できないのはなぜですか?」

eventsプラグインではなく binding に使用され、....validate()はイベントではないためです。 jQuery.on()は、 newが動的に作成されるときに、 afunctionを anに自動的にバインドするために使用されます。eventelement

繰り返しますが、質問の目的を説明したことはありません...なぜこれをしたいのですか? コードを保存するには?

開始点に戻ります...コールバック関数$('#newform').validate({/*options*/})内で呼び出すだけでajax success、他の場所に配置する必要があるコードとまったく同じ量のコードが必要になります。


元の答えは次のとおりです。初期化に関する一般的な情報の一部が.validate()まだ適用されるため、そのままにしておきます。


あなたの質問は基本的に「動的に追加されたフィールド入力にルールを適用するにはどうすればよいですか?」ということだと思います。

「後で現れる要素にjquery validateをアタッチする最もスマートな方法は何ですか」

rules('add')ルールを動的に適用するためのプラグインの組み込みメソッドを使用する。

「各 AJAX 呼び出しの .success() ハンドラーで jquery validate を再度呼び出すよりも良い方法はありますか?」

実際に.validate()再度電話するべきではありません。フォームのプラグインを初期化するために一度.validate()呼び出され、再度呼び出してもルールは変更されません。そのための方法があります。

ajax success新しいフィールド要素を追加するコールバック関数内で、組み込みrules('add')メソッドを使用します。

$('#yourfield').rules('add', {
    required: true,
    // other rules,
    messages: { // optional
        required:  "your optional custom message"
    }
});

.each()一度に複数のフィールドにルールを適用する必要がある場合は、jQuery を使用してください....

デモ: http://jsfiddle.net/ucYkY/

于 2013-03-10T15:31:58.997 に答える
0

html5 データ属性を使用し、すべてがプラグインによって処理されるParsley.jsを使用することをお勧めします。

html を記述し、必要に応じてデータ属性を追加するだけです。カスタム検証関数が必要な場合を除き、非常に宣言的で Javascript は関係ありません

動的入力フィールドに正しいデータ属性がある限り、パセリはそれらを見つけます

于 2013-03-10T10:16:17.597 に答える