編集
両方のイベントが発生しないようにするには、要素がフォーカスを失う前に何らかの方法で要素をマークする必要があります。こうすることで、blur
イベント ハンドラーは、イベントがキーアップの対象であるかどうか、または正当にフォーカスを失ったかどうかを判断できます。このようなもの:
$(".textbox").live("blur",function (event) {
if (!$(this).hasClass('keyupping'))
alert("blur Event fired");
});
$(".textbox").live("keyup",function (event) {
$(this).addClass('keyupping');
if(event.keyCode == 13){ // Detect Enter
alert("KeyUp fired after pressing Enter");
}
$(this).removeClass('keyupping');
});
試してみてください: http://jsfiddle.net/GRMule/sR6zm/
元の答え
イベントがkeyup
発生すると、ドキュメントからフォーカスを取得してモーダル ダイアログに適用するブラウザー アラート ダイアログを描画する準備が整います。これにより、blur イベントが発生します。
次に、何がヒットしたかを知るblur
前に、イベントがジャンプして実行コンテキストを終了します。keyup
これは、次のように要素からフォーカスを外さないものを使用することによって実証されconsole.log
ます: http://jsfiddle.net/GRMule/7vRLW/
イベントが発生する順序は実装固有です。つまり、IE のように動作する Firefox に依存することはできません。仕様を参照してください: http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-eventgroupings。IE でアラートをいじってみてください。この場合、blur
以前keyup
は IE 7 でblur
発生していましたが、Chrome では発生しませんでした。