IE和FF在對js支持的不同及解決方法

IE和FF在對js支持的不同及解決方法

1.window.event
   IE:有window.event對象
   FF:沒有window.event對象,可以通過函數的參數傳遞event對象。如onclick=clickHandler(event)
  解決辦法:var event = event || window.event;

2. 鼠標當前座標
  IE:event.x和event.y
 FF:event.pageX和event.pageY
 解決辦法:採用通用屬性:event.clientX和event.clientY屬性;

3. 鼠標座標加上滾動條滾過的距離
  IE:event.offsetX和event.offsetY
 FF:event.layerX和event.layerY
 解決辦法:<script type="text/javascript">
                   function mouseDownHandler(event) {
                     var event = event || window.event;
                     //var event = event ? event : window.event;
                     var x = event.offsetX || event.layerX;
                     var y = event.offsetX || event.layerY;
                   }
                   </script>

3. event.srcElement
  IE:event對象有srcElement屬性,但是沒有target屬性;
  FF:event對象有target屬性,但沒有srcElement屬性
 解決辦法:使用obj = event.srcElement ? event.srcElement : event.target;來代替IE下的event.srcElement或者FF下的event.target(注意event的兼容性);

4.event.toElement
 IE:event對象有toElement屬性,但沒有relatedTarget屬性
 FF:event對象沒有有toElement屬性,但有relatedTarget屬性
 解決辦法:var target = e.relatedTarget || e.toElement;

5. 標籤的x和y的座標位置,style.posLeft 和 style.posTop
 IE:有
 FF:沒有
 解決辦法:用通用屬性obj.offsetLeft 和 obj.offsetTop

6. 窗體的高度和寬度
 IE:document.body.offsetWidth 和 document.body.offsetHeight。注意,此時頁面一定要有body標籤。
 FF:window.innerWidth 和 window.innerHeight,以及 document.documentElement.clientWidth 和 document.documentElement.clientHeight。
解決辦法:通用屬性 document.body.clientWidth  和 document.body.clientHeight;

7. 添加事件
 IE:element.attachEvent('onclick',function)
 FF:element.addEventListener('click',function,true)
 解決辦法:element.onclick = function.雖然都可以使用click事件。但 和 addEventListener執行的是一個過程列表,也就是多個過程。
如:element.attachEvent(' element.attachEvent(" func2)這樣func1和func2都會被執行。

8. 標籤的自定義屬性
 IE:如果給標籤div1定義了一個屬性value,可以div1.value 和 div1["value"]取得該值
 FF:不能用div1.value 和div1["value"]
 解決辦法:div1.getAttribute('value')

9. document.form.item
 IE:現有問題,document.formName.item("itemName") 這樣的語句,不能在 FF 下運行
 FF:不支持
 解決辦法: document.formName.elements["elementName"]

10. 集合/數組類對象問題
 IE:有許多集合類對象取用時用()
 FF:不能這樣取用
 解決辦法:改用[]作爲下標運算。
 如:document.forms("formName") 改爲 document.forms["formName"]。document.getElementsByName("inputName")(1) 改爲 document.getElementsByName("inputName")[1]

11. HTML對象的id作爲對象名的問題
 IE:HTML對象的id可以作爲document的下屬變量名直接使用
 FF:需要用getElementById()方法
 解決辦法:用getElementById('idName')代替idName作爲對象變量使用

12. 用idName字符串取得對象的問題
 IE:利用eval(idName)可以取得 id 爲 idName 的HTML對象。
 FF:不支持
 解決辦法:getElementById(idName) 代替 eval(idName)

13. 變量名與某 HTML 對象 id 相同的問題
 IE:因爲HTML對象id 在IE中直接調用,所以變量名不能和id相同
 FF:可以使用變量名和id相同
 解決辦法,聲明變量時一律加上 var ,以避免歧義(最好id和變量名不要相同)。

14. document.getElementsByName() 和 document.all[name]
 IE:getElementsByName()、document.all[name] 均不能用來取得 div 元素
 FF:可以兼容document.all, 但會生成一條警告。
 解決辦法:可以用getElementById() 或者 getElementByTagName()來代替

15. input.type屬性問題
 IE:input.type屬性爲只讀
 FF:input.type屬性爲讀寫

16. window.location.href
  IE:(FF2.0以下),可以使用window.location 或 window.location.href ; FF 1.5下只能使用window.location
  解決辦法:使用window.location 來代替 window.location.href

17. 模態和非模態窗口問題
 IE:可以通過 showModalDialog 和 showModelessDialog 打開模態和非模態窗口
 FF:不支持
 解決辦法:直接使用window.open(pageURL, name, parameters) 方式打開新窗口,如果需要將子窗口中的參數傳遞迴父窗口,可以在子窗口中使用window.opener來訪問父窗口。
 如:var parWin = window.opener; parWin.document.getElementById('title').value = 'My Title';

18. body
 IE:body必須在body標籤被瀏覽器完全讀入後才存在
 FF:body在body標籤沒有被瀏覽器完全讀入之前就存在

19. 事件委託方法
 IE:document.body.onload = init;
 FF:document.body.onload = init();
 解決辦法:統一使用 document.body.onload = new Function('init()'); 或者 docuement.body.onload = function(){/* 這裏是代碼 */}

20. 父元素的區別
 IE:obj.parentElement;
 FF :obj.parentNode
 解決辦法:因爲FF與IE都支持DOM,所以可以都使用obj.parentNode

22.innerText在IE中能正常工作,但是innerText在FF中卻不行. 需用textContent

23. FF中設置HTML標籤的style時,所有位置性和字體尺寸的值必須後跟px。這個IE也是支持的

24. 父節點、子節點和刪除節點
IE:parentElement、parement.children,element.romoveNode(true)。
FF:parentNode、parentNode.childNodes,node.parentNode.removeChild(node)。



轉自:http://hi.baidu.com/swallow070705/item/492cdb2cde24920c72863e07

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章