以前にフォーカスされた要素の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/
おかげ男、私は2歳のスレッドにコメントして申し訳ありませんが – Kevin
を調査行くつもりが、あなたの主張はblurイベントは、常に前に発火するということですすべてのブラウザでclickイベントが間違いなく真実ですか?その仕様の一部ですか?私はこれが私にクロスブラウザの不具合を引き起こすかもしれないと思う気がする。 –
@MikeTurley私はそれがすべてのブラウザでこのように動作しなければならないと信じていますが、それを裏付ける仕様を挙げることはできません。現代のすべてのブラウザで簡単なテストを実行し、現在の動作を確認することで解決しますか? – Phrogz