-3

検証したい生年月日フィールドがあるとします。

日月年

ここで、これら 3 つのフィールドをすべて同時に検証したいと思います。つまり、ユーザーがまだこれら 3 つのフィールドのいずれかにフォーカスしている場合は、まだ検証しないでください。彼が全員を離れたら、日付を確認します。

とても簡単に思えます、私はできます:

 $('#dayInput').is(':focus')

3 つのフィールドすべてについて、そのうちの 1 つが true かどうかを確認します...しかし、これは非常に興味深い方法で失敗します。jQuery検証プラグインは、「inFocus」イベントと「out of focus」イベントの間の要素を検証しているようです。

そのため、年入力から月入力に移動すると、これら 2 つのイベントの間に 3 つの入力のうちどれも「フォーカス」されておらず、ユーザーが 3 つの dob 入力を離れたかどうかはわかりません。そのうちの。

これを回避する方法はありますか?

PS 登録が遅すぎるため、追加しようとしている余分なメソッドでイベント ハンドラーを登録することはできません。私がその日の入力にいるとします。そのままにしておきます => 検証が開始され、ハンドラー (フォーカスとぼかしが登録されます) が、手遅れで、前のイベントがスキップされます。

ここで意味をなすことを願っています。

4

2 に答える 2

1

フィールドがフォーカスを失ったときに検証をトリガーしたくない場合は、正確にいつですか?(フィールドのグループを指定して、それらが集合的にフォーカスを失ったときに検証をトリガーすることはできません。)submitボタンをクリックしたときのみ?もしそうなら、これらのオプションを試してください...

$(document).ready(function() {

    $('#myform').validate({
        onfocusout: false,
        onkeyup: false,
        // your other options
    });

});

フォームは、をクリックしたときにのみ検証されますsubmit

作業デモ:

http://jsfiddle.net/CQnRn/

ドキュメンテーション:

http://docs.jquery.com/Plugins/Validation/validate#toptions


合理的な代替案は、日付の3つではなく1つのフィールドを検証することです。

<input type="text" name="birthdate" />

ルールオプション:

rules: {
  birthdate: {
    required: true,
    date: true
  }
}

http://jsfiddle.net/LRAgX/

于 2013-01-14T15:50:21.020 に答える
0

&&たぶん、「and」演算子「 」を次のように使用できます

if ($('#dayinput').change() && $('#monthinput').change() && $('#yearinput').change()) {
$('#myform').validate(); 
}
于 2013-01-14T13:41:40.760 に答える