ie 纠结汇总
in Web前端 on javascript web 前端 - Hits()
IE8中点击锚记,如果a标记的target不是_blank,且href不是#,则会触发window的onload和onbeforeunload.
也就是说--经常的写法href="javascript:void(0)"也是会触发事件,估计MS是被石头敲了。
------------------------------------------------------
onload事件问题:
下面的写法:
<script type="text/javascript">
function ops(){
var win = window.open('','_blank');
win.onload = function(){
alert('ok');
};
win.location.href = 'test.html';
}
</script>
</head>
<body>
<div class="bb" onclick="ops();">
圆角三边 这里是内容
</div>
</body>
火狐里面是可以alert的,但是ie8就不行。
解决办法是子窗体调父窗体的方法模拟回调。(IE真是让人纠结。)
另外的:
window的onload事件比较容易触发不了,往往出现在初始化页面时此时你认为还没有onload但是
document.readyState 已经是 "complete"了,所以此时添加的onload事件不会触发。
-----------------------------------------------------------------
Ie8 window.open函数指定 location=no status=no 不起作用的原因是:ie8安全设置里需要加入站点为可信任站点,这种前提下,location=no status=no才会起作用。
----------------------------------------------------------------
默认div overflow-y:auto时,当出现滚动条时,用户想要选择文字,他向上滚动滚动条也应该滚动,但是如果设置了overflow-x:hidden,ie就白痴的不滚动了,FF下面是滚动的。
------------------------------------------------------------
window 的onblur事件:当这个窗口的某个元素获得焦点时,竟然也会触发window的onblur事件。(不一定是所有的情况会出现这个问题,具体那种情况下会出现这个问题还不知道)做chat时窗口消息提示出现问题就是这个原因,还好ie特别的有document的onfocusin 和onfocus out事件可以替代,因为页面元素获得焦点不会触发document的onblur事件[也可能是触发,但是最终也会触发 onfocusin,:onfocusout->onfocusin]
------------------------------------------------------------
在unbeforeload 和 ununload事件里发送ajax请求的话,ie会无法传送post值,解决办法是使用header来传参,但是header有大小限制,数据量太大的话就不会被服务器接收。也可使用ajax的同步请求来解决。使用new Image().src的方式也可以,但感觉不是很稳定。
------------------------------------------------------------
IE TEXTAREA javascript换行问题:
IE TEXTAREA javascript换行 txt.value+='\r\n';光标会显示没有换行(其实已经换行了),FF,chrome是好的,ie(6,7,8)有此bug,解决方案:将event.keyCode = 13让文本换行。
--------------------------------------------------------------------
ie 下的checkbox点击总觉得怪怪的,有时明明点了却没效果。
如果要将某个元素disable掉,el.disabled = true;这样写到是没问题。
但是要将原来disabled 的元素enable的话,el.disabled = false; 在IE下就有点怪了,有时可以有时又不行。
解决方法是删除掉disabled 属性 el.removeAttribute('disabled');
-----------------------------------------------------------------
scrollLeft
一般ie还是支持这个的,有的版本(ie7beta)
在面顶部声明为: DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-transitional.dtd"> 就会有问题.
但是往往在你加载页面时得到的scrollLeft为0,要等到页面全部初始化好后才能得到正确的值。
--------------------------------------------------------------------
ie6 option selected属性问题:
ie6下设置option的selected属性会导致脚本错误:option.selected = true;//error
解决办法:option.setAttribute('selected', true); //work
-----------------------------------------------------------------------------------
其实IE对于非表单物件一样可以用getElementsByName,只不过要求那个element 的Name和Id 都存在并且相同. 否则就取不到。
<div id="spn" name="spn">...</div>
<div id="spn" name="spn">...</div>
------------------------------------------------------------------------------------
title换行,这个只有IE可以,使用 来代表换行。
但是用包含这个字符的html使用extjs模板会导致非IE浏览器下模板编译错误!
---------------------------------------------------------------------------
对于下面的html:
<div id="content"> <div class="line"> <div id="c1" class="ct"><div id="holder1" class="holder">1</div></div> <div id="c2" class="ct"><div id="holder2" class="holder">2</div></div> </div> </div>
想让div#c1,div#c2横向排列,如果这样写:
.ct{ float: left; }
ok,那是没问题的。
但是如果这样写:
.line>div{ float: left; }
你会发现c1,c2仍然换行了。这个问题只有ie才有。