2010-12-23 10 views
3

こんにちは、すばらしい人!クリックしたアイテムに基づいてぼかしハンドラをキャンセルする

今回私の問題は、mouseClickがblurステートメントで発生したかどうかをテストすることです。

すべての入力フィールドがBLURで検証されるグローバルソリューションがあります。 このイベントの中で、特定の要素がクリックされたかどうかをテストする必要があります(helpBubbleの場合)。ただし、その要素がクリックされていない場合でも検証は行われません。起こる必要がある。

何か助けが圧倒的に高く評価されるでしょう!

答えて

6

以前にフォーカスされた要素のblurイベントは、新しくフォーカスされた要素のclickイベントの前に発生します。そのため、タイムアウトを追加しない限り、移動先の内容に基づいてぼかしを防止することはできません。例えば:それが起こる前に、それがキャンセルされます(それはほとんどすぐに起こるのだろう)

var validationTimer; 
$('#myform input').blur(function(){ 
    var blurred = $(this); 
    validationTimer = setTimeout(function(){ 
    validationTimer = null; 
    // Perform Validation on 'blurred'. 
    },100); 
}); 

$('.helpbubble').click(function(){ 
    if (validationTimer){ 
    clearTimeout(validationTimer); 
    validationTimer = null; 
    } 
}); 

これは、検証を実行する前に、ぼかした後、100msのをお待ちしておりますが、クリックすると、その時間枠内で発生した場合。

編集:ここでは作業例です:http://jsfiddle.net/9SzDP/

+0

おかげ男、私は2歳のスレッドにコメントして申し訳ありませんが – Kevin

+0

を調査行くつもりが、あなたの主張はblurイベントは、常に前に発火するということですすべてのブラウザでclickイベントが間違いなく真実ですか?その仕様の一部ですか?私はこれが私にクロスブラウザの不具合を引き起こすかもしれないと思う気がする。 –

+0

@MikeTurley私はそれがすべてのブラウザでこのように動作しなければならないと信じていますが、それを裏付ける仕様を挙げることはできません。現代のすべてのブラウザで簡単なテストを実行し、現在の動作を確認することで解決しますか? – Phrogz

関連する問題