javascript如何捕捉IE窗口失去焦点事件

2024-12-17 09:48:26
推荐回答(5个)
回答1:

你说的是从form元素切换的时候...会自动检查数据..那样blur就触发window.onblur是吧....

我估计你是不是这样写的:







Name:

Email:



这样传递this确实会传进去..但是这里不可以在函数里再次使用this..否则..this就会指向window...这个有点特殊要涉及到JS的上下文对象的问题..我记得有一次也有个人问这个问题的...

当this在script标签中出现的时候..它就会出现这个上下文对象的问题...这个时候的this总是指向包围它的那个对象...比如...
利用加载后触发事件:

window.onload=function(){
document.getElementById("name").onblur=function(){
if(this.value==""){
this.focus();
this.className="highlight";
}
}
}






Name:

Email:



这个时候..当窗口加载完成后..它执行..查找ID为XX的元素...然后当这个元素blur的时候..这个时候..利用匿名函数..this就会指向ID的这个元素...
也就是说...当想让this指向一个元素的时候...这个对象必须包围this..产生上下文对象..否则..this总是指向window...

如..


此时this就指向window...

这个代码这样写也是可以的..
window.onload=function(){
document.getElementById("name").onblur=checkform;
}

function checkform(){
if(this.value==""){
this.focus();
this.className="highlight";
}
}

这样..this还是指向id的元素...

象你利用this传递值后....必须指定另一个形参来接受它这个值..因为function它是在全局状态下定义的...function此时就是window的一个方法而已...

比如这样写..






Name:

Email:


回答2:

window.onblur = function (e) {
e = e || window.event;
if (window.ActiveXObject && /MSIE/.test(navigator.userAgent)) { //IE
//如果 blur 事件是窗口内部的点击所产生,返回 false, 也就是说这是一个假的 blur
var x = e.clientX;
var y = e.clientY;
var w = document.body.clientWidth;
var h = document.body.clientHeight;

if (x >= 0 && x <= w && y >= 0 && y <= h) {
window.focus();
return false;
}
}
}

回答3:

用jquery吧,都封装好了,浏览器兼容性很好。

回答4:

window.onblur

回答5: