1. 对象问题
1.1 Form对象
现有问题:
现有代码这获得form对象通过document.forms("formName"),这样使用在IE 能接受,MF
不能。
解决方法:
改用 作为下标运算。改为document.forms["formName"]
备注
上述的改用
作为下标运算中的formName是id而name
1.2 HTML对象
现有问题:
在 IE 中,HTML 对象的 ID 可以作为
document 的下属对象变量名直接使用。在 MF
中不能。
document.all("itemName")或者document.all("itemId")
解决方法:
使用对象ID作为对象变量名
document.getElementById("itemId")
备注
document.all是IE自定义的方法,所以请大家尽量不使用。
还有一种方式,在IE和MF都可以使用
var
f = document.forms["formName "];
var o = f. itemId;
1.3 DIV对象
现有问题:
在 IE 中,DIV对象可以使用ID作为对象变量名直接使用。在 MF 中不能。
DivId.style.display =
"none"
解决方法:
document.getElementById("DivId").style.display =
"none"
备注
获得对象的方法不管是不是DIV对象,都使用getElementById方法。参见1.2
1.4
关于frame
现有问题
在 IE中
可以用window.testFrame取得该frame,mf中不行
解决方法
在frame的使用方面MF和IE的最主要的区别是:
如果在frame标签中书写了以下属性:
那么IE可以通过id或者name访问这个frame对应的window对象
而mf只可以通过name来访问这个frame对应的window对象
例如如果上述frame标签写在最上层的window里面的htm里面,那么可以这样访问
IE:
window.top.frameId或者window.top.frameName来访问这个window对象
MF:只能这样window.top.frameName来访问这个window对象
另外,在mf和ie中都可以使用window.top.document.getElementById("frameId")来访问frame标签
并且可以通过window.top.document.getElementById("testFrame").src
= 'xx.htm'来切换frame的内容
也都可以通过window.top.frameName.location =
'xx.htm'来切换frame的内容
1.5 窗口
现有问题
IE中可以通过showModalDialog和showModelessDialog打开模态和非模态窗口,但是MF不支持。
解决办法
直接使用window.open(pageURL,name,parameters)方式打开新窗口。
如果需要传递参数,可以使用frame或者iframe。
2.
总结
2.1 在JS中定义各种对象变量名时,尽量使用id,避免使用name。
在 IE 中,HTML 对象的 ID 可以作为 document
的下属对象变量名直接使用。在 MF 中不能,所以在平常使用时请尽量使用id,避免只使用name,而不使用id。
2.2 变量名与某 HTML 对象
id 相同的问题
现有问题
在 MF 中,因为对象 id 不作为 HTML 对象的名称,所以可以使用与 HTML 对象 id 相同的变量名,IE
中不能。
解决方法
在声明变量时,一律加上 var ,以避免歧义,这样在 IE 中亦可正常运行。
此外,最好不要取与 HTML 对象 id
相同的变量名,以减少错误。
1. document.all
Firefox可以兼容document.all,
但会生成一条警告。可以用getElementById("*") 或者
getElementByTagName("*)来代替
不过对于document.all.length等属性,则完全不兼容。
2.
parentElement
这个也不兼容。比方说, obj.parentElement.name 则应改成
obj.parentNode.attributes.getNamedItem("name").nodeValue (不知道如何写得更简洁些)
3.
event
W3C不支持windows.event
比方说:
在IE里面
判断浏览器navigator.appName == "Microsoft Internet Explorer"
navigator.userAgent.indexOf("MSIE")>0
firefox不支持
window.close()
innerText textContent
firefox只有在window.open()的情况下支持window.close();但如果这个页是iframe也不行,建议用top.close.
children不支持,支持childNodes
firefox读xml也要注意IE里面01234子节点,firefox里面就变成13579了
IE
var opname=c.childNodes[0].text;
var opid=c.childNodes[1].text;
var opurl=c.childNodes[2].text;
var opuser=c.childNodes[3].text;
var opadress=c.childNodes[4].text
ff
var opname=c.childNodes[1].textContent;
var opid=c.childNodes[3].textContent;
var opurl=c.childNodes[5].textContent;
var opuser=c.childNodes[7].textContent;
var opadress=c.childNodes[9].textContent;
但是firefox还是支持chindNodes的
在firefox中,自己定义的属性必须getAttribute()取得
但是千万注意,getAttribute()取得的值是不会变的,比如
var a=b.getAttribute("属性")
b.属性=100
var c=b.getAttribute("属性")
不管b.属性改成多少,a和c是相等的。
建议操作方式
全局变量 fag=0;
if(fag==0)
fag=b.属性=b.getAttribute("属性");
firefox不能写function a.b()
{}
要写成a.b=function(){}
firefox不支持src="file:///c:a.gif";
xmlHttp.setRequestHeader firefox里面一定要大写
ff的ajax,IE里面可以有很多写法,但ff里面有时就会出错,下面写一种不会出错的写法
function GetDataFromServer( url, id )
{
if(window.XMLHttpRequest)
{ request = new XMLHttpRequest();}
else
if(window.ActiveXObject)
{ request = new ActiveXObject("MSXML2.XMLHTTP.5.0");}
var serverUrl = url ;
if( request )
{
window.status = "数据更新中...." ;
request.open("get",serverUrl,true) ;
request.setRequestHeader("content-type","application/x-www-form-
urlencoded") ;
request.onreadystatechange = function(){onResponse(id);};
request.send(null) ;
}
}
function onResponse(id)
{
var xmlHttp=request;
if(xmlHttp.readyState == 4)
{
if(xmlHttp.status == 200)
{
var result = xmlHttp.responseText ;
if(document.getElementById("load_"+id))
{
逻辑;
}
window.status = "数据更新完成" ;
}
}
}
同时支持IE和Firefox的日期控件---DatePicker