2012-02-21 9 views
2

私はクエリバリデーションプラグイン(http://docs.jquery.com/Plugins/Validation)を使用しています。私の目標はフォームが表示される前にエラーメッセージを表示することです提出された。これを行うには、私は.valid()メソッドを使用しています。jQuery検証プラグイン - フォーカスイベントがキー/マウスイベントに一貫しない

エラーが発生するまでこれらのメッセージを表示したくないので、最初は隠しています。フィールドが初めてフォーカスされているときは、エラーメッセージを表示したくありません。これはマウスで入力をフォーカスするときにはうまくいきますが、タブキーを使用してフィールドにフォーカスを合わせるとエラーメッセージが表示されます。

私はフォーカスの問題を示すために、ここでフィドルを作成しました:http://jsfiddle.net/tucsonlabs/WQnHN/4/

答えて

1

@mindandmediaと@Fabianのコードの組み合わせを使用する必要がありました。ここで

は私のために働いていたものです:

var code; 

$('input').keyup(function(e) { 
    code = (e.keyCode ? e.keyCode : e.which); 
    if(code == 9) { 
     return false; 
    } 
}); 

$('#myForm').validate(); 

$('input').blur(function() { 
    if(!$(this).valid()) { 
     $(this).next('label.error').show();     
    } 
}); 
+0

あなたは私たちの両方をupvoteできるようになりました:) – Fabian

1

これがうまく機能:

$(document).ready(function() { 
    $('#myForm').validate(); 

    //$('#myForm').valid(); 
    $('#myForm').hideErrors(); 

    $('input').blur(function() { 
     if(!$(this).valid()) $(this).next('label.error').show();     
    }); 
});​ 
+0

これは多くのことを助けました。 .hideErrors()メソッドがないので、私はそれを書きました。私はそれをまったく使用する必要はないことが判明しました。 – TucsonLabs

+0

うれしい私は助けることができます。 jqueryのhideErrors: '$( 'label.error')。hide();' – mindandmedia

+0

ええ、私はこれらの行に沿って何かしました。 – TucsonLabs

2

これは動作するはずです:http://jsfiddle.net/yQRvZ/

var code; 
$('input').keyup(function(e) { 
    code = (e.keyCode ? e.keyCode : e.which); 
    if(code == 9) { 
     return false; 
    } 
}); 

毎回あなたがキーを離し(これは.keyup()です)、inputフィールドは、このjQueryコードがリリースされたキーコードをチェックするようにフォーカスされていますキー。 Tabの場合、キーコードは9です。したがって、Tabを解放するたびにreturn false;はデフォルトイベントを防止し、イベントのバブリングを防止します。

+0

ありがとう、これは大きな助けでした! – TucsonLabs

+0

なぜ、あなたのコードを説明するのに気をつけますか? – mindandmedia

+0

は説明を追加しました。 – Fabian

関連する問題