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