jQueryで入力バリデーションを行いたい。ユーザーが入力をぼかすたびに、検証を受ける必要があります。検証は問題ではなく、重要な部分です。
一部の入力は、より大きな親要素に埋め込まれています。親要素は、focusin および focusout イベントのインジケータである必要があります。つまり、ユーザーが入力の親要素をクリックすると、入力にフォーカスする必要があります。
ここにデモンストレーションがあります:
jsFiddle のデモ
デモでは、最初の入力はクリック可能な で囲まれてul
おり、下にある入力がフォーカスされます。div
2 番目の入力は、何もしないa で囲まれています。コンソールで出力を確認します。
デモから取得したマークアップを次に示します。HTML :
<ul>
<li>
<input type="text" class="embed" />
</li>
</ul>
<div>
<input type="text" class="normal" />
</div>
JavaScript :
$('input').focusin(function(event) {
console.log('input.' + $(this).attr('class') + ' focusin');
});
$('input').focusout(function(event) {
console.log('input.' + $(this).attr('class') + ' focusout');
// either here or in blur:
// now i want to do some validation and display errors if there are any
});
$('input').blur(function(event) {
console.log('input.' + $(this).attr('class') + ' blur');
// either here or in focusout:
// now i want to do some validation and display errors if there are any
});
$('ul').click(function(event){
console.log('ul click');
$('input.embed').focus();
});
現在、これらは私の質問と問題です:
- 埋め込みをクリックすると
input
、クリックイベントも発生しul
ますが、これは望ましくありません。入力が直接クリックされた場合、そのイベントでどのように検出できますか? - 埋め込み
input
が既にフォーカスされていて、親ul
をクリックすると、(検証をトリガーする) の focusout イベントが発生し、クリック ハンドラーinput
のためにすぐに再びフォーカスされます。ul
どうすればこれを検出し、単に何もしないでしょうか? 実際、ユーザーの観点からは、フォーカスは変わっていません。 blur
とはどう違いfocusout
ますか?