javascript在IE和Firefox中的兼容考虑

canca canca
2007-07-01 13:31
2
0
1.document.formName.item("itemName") 问题


统一使用document.formName.elements["elementName"].


2.集合类对象问题


统一使用[]获取集合类对象.



3.自定义属性问题


统一通过getAttribute()获取自定义属性. 


4.eval("idName")问题


统一用getElementById("idName")来取得id为idName的HTML对象. 



5.变量名与某HTML对象ID相同的问题


使用document.getElementById("idName")代替document.idName.最好不要取HTML对象ID相同的变量名,以减少错误;在声明变量时,一律加上var,以避免歧义.


6.const问题


统一使用var关键字来定义常量.


7.input.type属性问题




8.window.event问题









9.event.x与event.y问题


使用mX(mX = event.x ? event.x : event.pageX;)来代替IE下的event.x或者Firefox下的event.pageX.


10.event.srcElement问题


使用obj(obj = event.srcElement ? event.srcElement : event.target;)来代替IE下的event.srcElement或者Firefox下的event.target. 


11.window.location.href问题


使用window.location来代替window.location.href.


12.模态和非模态窗口问题


直接使用window.open(pageURL,name,parameters)方式打开新窗口。




13.frame问题






在IE和Firefox中都可以使用window.document.getElementById("frameId")来访问这个frame对象.







14.body问题





程序代码 程序代码
<body> 
<script type="text/javascript"> 
document.body.onclick = function(evt){ 
evt = evt || window.event; 
alert(evt); 

</script> 
</body>


程序代码 程序代码
<body>
</body> 
<script type="text/javascript"> 
document.body.onclick = function(evt){ 
evt = evt || window.event; 
alert(evt); 

</script>




15. nodeName 和 tagName 问题

问题:在MF,IE中,所有节点均有 nodeName 值,但 textNode 没有 tagName 值。
解决方法:使用 tagName,但应检测其是否为undefined。

16. url encoding

问题:js中如果书写url就直接写&不要写&例如var url = 'xx.jsp?objectName=xx&objectEvent=xxx';
frm.action = url那么很有可能url不会被正常显示以至于参数没有正确的传到服务器,一般会服务器报错参数没有找到;当然如果是在tpl中例外,因为tpl中符合xml规范,要求&书写为&
一般MF无法识别js中的&

17.children 与 childNodes,removeNode

问题一:在MF中没有  parentElement parement.children  而用 parentNode parentNode.childNodes
问题二:childNodes的下标的含义在IE和MF中不同,MF使用DOM规范,childNodes中会插入空白文本节点。
问题三:一般可以通过node.getElementsByTagName()来回避这个问题。当html中节点缺失时,IE和MF对parentNode的解释不同,例如
   <form>
   <table>
        <input/>
   </table>
   </form>
MF中input.parentNode的值为form, 而IE中input.parentNode的值为空节点

问题四:MF中节点没有removeNode方法,必须使用如下方法 node.parentNode.removeChild(node)


原文地址:http://yoker.sc0826.com/trackback.asp?tbID=232

发表评论