<iframe src='' frameborder="no" id="iframe1" onfocus="show();"></iframe> //js
function show(){
alert("成功");
}
为什么在IE6 就很正常,但是在火狐就是没调用到脚本,这是为什么呢?请大侠们帮忙解决下,先谢啦
解决方案 »
- 如何用js或C#运行 cmd的命令呢
- DropDownList绑定了数据库表,如何给他指定选项?
- 网站有两个域名,怎么优化
- 要在此字符串中进行分析,必须指定有效信息。。。?
- ADO。NET 选择数据库(怎么选)
- gridview的用法
- 关于asp.net2.0中TREEVIEW的问题?(急)
- 初学asp.net 问的都是初级的问题
- 什么数据对象有addnew方法呢?怎么用?看我的程序为什么出错。
- 使用DataGrid.RenderControl(HtmlTextWriter)的方法导入到excel,发现导出的数据中格式有误,比如DataGrid中显示为123.00,有两位小数,但是
- 想显示dotnetcharting控件饼图的百分比事小数位怎么设置,不让它四舍五入,小于1就等于0了
- js调用webservices报错webservices未定义 在线等解答
<iframe src="about:blank" onfocus="alert('onfocus');" onblur="alert('onblur');" id="AA">
</iframe> <script>
window.setTimeout( function(){alert(1); document.getElementById("AA").focus(); }, 0);
</script>
看了半天也没明白这到底是怎么回事,调试了一把发现在是在第一次运行的时候在setTimeout触发了后,确实触发了blur事件和focus事 件,可是之后再通过鼠标点击想触发这两个事件也不行,看样子这两个事件是有机会触发的,也许是采用一般的方式不能吧。不过用setTimeout这种方式 太鸡肋了,总不至于每次去调用setTimeout去触发吧,我要是知道什么时候去调setTimeout了还不如直接去调用事件处理函数更好点。这种方 法也是被毙了。 再次深度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 />
</body>
试了一下果真可以直接触发,效果跟在IE下的一样。回过头去分析了一下代码,发现firefox中原来iframe上的事件挂到了iframe中的 contentWindow中去了,与真接在html元素里面写事件属性相比,IE可能把iframe上的事件关联到了contentWindow上了, 可firefox却不是这样的,还是各是各的。这样带来的问题是firefox想要给iframe加事件只能够用脚本去加了。
本来以为IE和firefox中对iframe的事件这部分定义不一样,回头去再去看看了HTML4.0中关于iframe的定义,果真是 iframe上面就没有任何事件的定义,看来是IE顺手给加上的。firefox号称最符合html标准,那么写在iframe上的“事件”没有任何响 应,自然也是合情合理的。DHTML手册上有一句话,由于没有“window”元素,body 元素将作为下列 window 对象事件的宿主:onblur, onbeforeunload, onfocus, onload 和 onunload。可HTML4.0里面body是有这两个事件的,所以也就不难解释为什么用脚本给iframe的contentWindow挂上事件就 可以触发了,实际上这个事件是来自于contentWindow里面的body元素。事情到这里还算是比较满意了,可是想想就因为一个浏览器不兼容的问题导致我花了老半天时间,真的很窝火。