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

不同浏览器对事件触发的条件可能有点略微区别,今天我们说下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>  
<body onload="setit()">  
<iframe  width="155" height="144" id="myframe"></iframe>  
<input /> 

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

时间: 2024-10-29 04:44:12

解决ff中Iframe的focus和blur事件触发无效问题的相关文章

解决jquery中动态新增的元素节点无法触发事件问题的两种方法_jquery

比如做一个ajax读取留言列表的时候,每条留言后面有个回复按钮,class为"reply",如果你用的是$(".reply").click(function(){ //do something... }),想必后面通过ajax加载进来的列表中的回复按钮,点击事件会失效. 其实最简单的方法就是直接在标签中写onclick="",但是这样写其实是有点low的,最好的方式还是通过给类名绑定一个click事件. 解决jquery中动态新增的元素节点无法触

jquery中动态新增的元素节点无法触发事件解决办法

比如做一个ajax读取留言列表的时候,每条留言后面有个回复按钮,class为"reply",如果你用的是$(".reply").click(function(){ //do something... }),想必后面通过ajax加载进来的列表中的回复按钮,点击事件会失效. 其实最简单的方法就是直接在标签中写onclick="",但是这样写其实是有点low的,最好的方式还是通过给类名绑定一个click事件. 解决jquery中动态新增的元素节点无法触

timer-关于右下角跟随悬浮框疑问,下列的js代码为什么在IE中有效果而FF中没有?该怎样解决?

问题描述 关于右下角跟随悬浮框疑问,下列的js代码为什么在IE中有效果而FF中没有?该怎样解决? window.onscroll=function(){ var oDiv=document.getElementById('div1'); var scrollTop=document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop; //oDiv.style.top=document.docume

在首页中iframe引入一个加载中的页面,在ie浏览器中该部分出现几秒钟白屏,怎么解决???

问题描述 在首页中iframe引入一个加载中的页面,在ie浏览器中该部分出现几秒钟白屏,怎么解决??? 在首页中iframe引入一个加载中的页面,在ie浏览器中该部分出现几秒钟白屏,怎么解决??? 解决方案 加载的那个页面初始化数据也是需要时间的,你可以在加载的时候有一个对应的提示[正在加载]或者加一个等待的gif图片.

ie7中 iframe.style.height=&quot;100%&quot; 无效解决方法

ie7中 iframe.style.height="100%" 无效解决方法 100%高度的iframe在ie7中显示错误,原因是iframe.style.height="100%".       1.设置iframe父容器的高度值,100%就能生效(由此猜测默认情况下iframe的父容器高度是某个比较小的值,因此显示出来高度比较小)       2.如果是脚本动态创建的,iframe.style.height=document.body.scrollheight

使用jQuery快速解决input中placeholder值在ie中无法支持的问题

 本篇文章主要介绍了使用jQuery快速解决input中placeholder值在ie中无法支持的问题.需要的朋友可以过来参考下,希望对大家有所帮助  代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http

jQuery解决input元素的blur事件和其他非表单元素的click事件冲突问题_jquery

HTML结构:很简单,就一个input,一个div,能说明问题就OK了: <input type="text" value="默认值"><br/><br/><div>搜索</div> 想要实现的结果: 1.input框获取焦点时value为"",失去焦点时value为"默认值":-----这个很好实现: 2.当在input框中输入要搜素的内容后,点击div搜索,要求控

解决父类加载iframe,src参数过大导致加载失败

原文:解决父类加载iframe,src参数过大导致加载失败<iframe src="*******.do?param=****" id="leftFrame" name="leftFrame" frameborder="0"></iframe> 或者是使用js加载src: var params = "?pk_id="+pk_id; var frameLeftSrc = "&

【求助】jquery 的focus与blur问题

问题描述 假设有两个div:div1,div2,用键盘操作div的切换:$(div1,div2).focus(function(){code:}).blur(function(){code:});div1.focus()://firefox需要先div1.blur();ie不需要//通过在code处console可以看出:div2.focus(); 1.在ie中,会自动调用div1的blur()?firefox不会自动调用?为什么?2.在ie中,对focus()调用,会有多次调用?firefox