以下所有IE指IE6.0
驗證是否是IE浏覽器(來之於googleJavascript)
varagt=navigator.userAgent.toLowerCase();
varis_IE=(agt.indexOf("msIE")!=-1&&document.all);
正式開始
◆事件委托方法
IE
document.body.onload=inject;//Functioninject()在這之前已被實現
Firefox
document.body.onload=inject();
有人說標准是:
document.body.onload=newFunction('inject()');
在Firefox無法取得event.srcElement
◆通過其他方式傳遞對象
- if(isIE)
- thistable.attachEvent("onmousedown",OnClickChangeTdBackColor);
- //thistable.onmousedown=OnClickChangeTdBackColor;
- else//dealFirefox
- {
- for(vari=0;i<thistable.rows.length;i++)
- {
- varrowObj=thistable.rows[i];
- for(varj=0;j<rowObj.cells.length;j++)
- {
- varcellObj=rowObj.cells[j];
- cellObj.setAttribute("onmousedown","OnClickChangeTdBackColor(this)");
- }
- //alert(rowObj.cells[0].tagName);
- }
- }
◆在Firefox下編寫事件處理函數
因為Firefox並沒有window.event.如果要得到event對象,就必須要聲明時間處理函數的第一個參數為event.
所以為了兼容IE與Firefox,一般的事件處理方法為:
- btn.onclick=handle_btn_click;
- functionhandle_btn_click(evt)
- {
- if(evt==null)evt=window.event;//IE
- //處理事件.
- }
對於簡單的程序,這不算麻煩.
但對於一些復雜的程序,某寫函數根本就不是直接與事件掛鉤的.如果要把event傳進該參數,那麼所有的方法都要把event傳來傳去..這簡直就是噩夢.