2012-04-11 23 views
40

focusInvalidオプションがあります。デフォルトではtrueです。しかし、フォーム提出が発生した場合にのみ機能します。私がvalidメソッドでフォームを検証すると、動作しません。ですから、validを使用すると無効なフィールドをどのようにフォーカスするのでしょうか?jQueryで無効なフィールドの焦点を合わせる方法は?

違いを確認するにはthis demoをご覧ください。ボタンを押すだけです。あなたはクリックハンドラでそれを使用できるように変数にあなたのバリデータを保存するために必要なすべての

+1

@エヴァン、あなたはjsbinが好きではありませんか?それを変更することもできます。http://jsbin.com/ayupob/edit#javascript,html –

答えて

40

まず:

var validator = $("#test-form").validate({ /* settings */ }); 

[検証ハンドラで、手動でvalidator変数からfocusInvalid関数を呼び出すことができます:あなたが最初のelemにフォーカスを設定することができますinvalidHandler

$("#validate").click(function() { 
     if ($("#test-form").valid()) 
       alert("Valid!"); 
     else 
       validator.focusInvalid(); 

     return false; 
    }); 

Example

49

あなたは失敗します:

$("#form").validate({ 
    onfocusout: false, 
    invalidHandler: function(form, validator) { 
     var errors = validator.numberOfInvalids(); 
     if (errors) {      
      validator.errorList[0].element.focus(); 
     } 
    } 
}); 
+3

jQueryの検証では、最初の無効な要素**または最後にフォーカスを当てた無効な要素**が選択されます。あなたのコードは、この煩わしさを避けて、常に最初のものを選択する唯一のものです。ありがとうございました! –

+2

ええ、jquery.validatesフォーカス処理に影響するsnafusがたくさんあります。それ自体はトップのように機能しますが、レスポンシブなデザインとより多くのjqueryスクリプトを追加すると、フォーカスが多少オフになることがあります。素晴らしいスクリプト、投稿していただきありがとうございます。 –

+0

+1このオプションはどこにも見つかりませんでした。 BTW、小さなヒント: 'validator.lastActive = validator.errorList [0] .element;'は、2つの要素に焦点を当てるのを避けるためです。これは、 'end date'フィールドが最後のアクティブで、' start date'最初の無効なフィールドとして、両方のフィールドでdatepickersがポップアップしました(もちろん両方が無効です)。乾杯!! – Fr0zenFyr

関連する問題