编辑
为了防止这两个事件触发,您必须以某种方式标记元素,然后才能使其失去焦点。这样,您的blur
事件处理程序可以判断该事件是否是 keyup 的主题,或者它是否合法地失去了焦点。像这样的东西:
$(".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
之前跳入并完成其执行上下文。keyup
这可以通过使用不会将焦点从元素上移开的东西来证明,例如:http console.log
: //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 中不会触发!