[解决方法]解决ff中Iframe的focus和blur事件触发无效问题

时间:2019-08-23  来源:jquery  阅读:

不同浏览器对事件触发的条件可能有点略微区别,今天我们说下Firefox浏览器中Iframe的focus和blur事件触发无效问题。

解决方案:

1:利用contentWindow,直接使用jquery的blur和focus,如果使用原生,加一个浏览器判断然后attachEvent 和 addEventListener就行了

 代码如下

$($("#frame")[0].contentWindow).blur(function(){})
$($("#frame")[0].contentWindow).focus(function(){})

2:setTimeout解决它

 代码如下

$("#target").focusout(function() {
setTimeout(function() {
    $(this).focus();
}, 0);
});

为什么FF存在这种问题?其实在HTML标准中iframe是没有这些事件的,但是IE给加上了。在火狐下可以通过contentWindow这种方式来处理这种事件

再次深度GOOGLE,发现了一个老外写的很不错的代码:

 代码如下

<script>  
function setit(){  
if(document.all){  
document.getElementById("myframe").attachEvent("onblur",dothis);  
}else{  
document.getElementById("myframe").contentWindow.addEventListener("blur",dothis,false);  
}  
}  
   
function dothis(){  
alert("blurred");  
}  
</script>  
  
  
 

试了一下果真可以直接触发,效果跟在IE下的一样。回过头去分析了一下代码,发现firefox中原来iframe上的事件挂到了iframe中的contentWindow中去了,与真接在html元素里面写事件属性相比,IE可能把iframe上的事件关联到了contentWindow上了,可firefox却不是这样的,还是各是各的。这样带来的问题是firefox想要给iframe加事件只能够用脚本去加了。

[解决方法]解决ff中Iframe的focus和blur事件触发无效问题

http://m.bbyears.com/wangyezhizuo/63927.html

推荐访问:解决方法 英文
相关阅读 猜你喜欢
本类排行 本类最新