??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
(1)现有问题Q?br />现有代码中存在许?document.formName.item("itemName") q样的语句,不能?MF 下运?br />(2)解决ҎQ?br />改用 document.formName.elements["elementName"]
(3)其它
参见 2
2. 集合cd象问?br />(1)现有问题Q?br />现有代码中许多集合类对象取用时?()QIE 能接受,MF 不能?br />(2)解决ҎQ?br />改用 [] 作ؓ下标q算。如Qdocument.forms("formName") 改ؓ document.forms["formName"]?br />又如Qdocument.getElementsByName("inputName")(1) 改ؓ document.getElementsByName("inputName")[1]
3. window.event
(1)现有问题Q?br />使用 window.event 无法?MF 上运?br />(2)解决ҎQ?br />MF ?event 只能在事件发生的现场使用Q此问题暂无法解冟뀂可以这样变通:
原代?可在IE中运?Q?br />
...
C?可在IE和MF中运?Q?br />
...
此外Q如果新代码中第一行不改,与老代码一L??gotoSubmit 调用没有l参?Q则仍然只能在IE中运行,但不会出错。所以,q种Ҏ tpl 部分仍与老代码兼宏V?
4. HTML 对象?id 作ؓ对象名的问题
(1)现有问题
?IE 中,HTML 对象?ID 可以作ؓ document 的下属对象变量名直接使用。在 MF 中不能?br />(2)解决Ҏ
?getElementById("idName") 代替 idName 作ؓ对象变量使用?
5. 用idName字符串取得对象的问题
(1)现有问题
在IE中,利用 eval(idName) 可以取得 id ?idName ?HTML 对象Q在MF 中不能?br />(2)解决Ҏ
?getElementById(idName) 代替 eval(idName)?
6. 变量名与?HTML 对象 id 相同的问?br />(1)现有问题
?MF 中,因ؓ对象 id 不作?HTML 对象的名Uͼ所以可以用与 HTML 对象 id 相同的变量名QIE 中不能?br />(2)解决Ҏ
在声明变量时Q一律加?var Q以避免歧义Q这样在 IE 中亦可正常运行?br />此外Q最好不要取?HTML 对象 id 相同的变量名Q以减少错误?br />(3)其它
参见 问题4
[NextPage]
7. event.x ?event.y 问题
(1)现有问题
在IE 中,event 对象?x, y 属性,MF中没有?br />(2)解决Ҏ
在MF中,与event.x {效的是 event.pageX。但event.pageX IE中没有?br />故采?event.clientX 代替 event.x。在IE 中也有这个变量?br />event.clientX ?event.pageX 有微妙的差别Q当整个面有滚动条的时候)Q不q大多数时候是{效的?
如果要完全一P可以E麻烦些Q?br />mX = event.x ? event.x : event.pageX;
然后?mX 代替 event.x
(3)其它
event.layerX ?IE ?MF 中都有,具体意义有无差别未试验?
8. 关于frame
(1)现有问题
?IE?可以用window.testFrame取得该frameQmf中不?br />(2)解决Ҏ
在frame的用方面mf和ie的最主要的区别是Q?br />如果在frame标签中书写了以下属性:
那么ie可以通过id或者name讉Kq个frame对应的window对象
而mf只可以通过name来访问这个frame对应的window对象
例如如果上述frame标签写在最上层的window里面的htm里面Q那么可以这栯?br />ieQ?window.top.frameId或者window.top.frameName来访问这个window对象
mfQ?只能q样window.top.frameName来访问这个window对象
另外Q在mf和ie中都可以使用window.top.document.getElementById("frameId")来访问frame标签
q且可以通过window.top.document.getElementById("testFrame").src = ‘xx.htm’来切换frame的内?br />也都可以通过window.top.frameName.location = ‘xx.htm’来切换frame的内?br />关于frame和window的描q可以参见bbs的‘window与frame’文?br />以及/test/js/test_frame/目录下面的测?br />----adun 2004.12.09修改
9. 在mf中,自己定义的属性必getAttribute()取得
10.在mf中没?parentElement parement.children 而用parentNode parentNode.childNodes
childNodes的下标的含义在IE和MF中不同,MF使用DOM规范QchildNodes中会插入I白文本节点?br />一般可以通过node.getElementsByTagName()来回避这个问题?br />当html中节点缺失时QIE和MF对parentNode的解释不同,例如
MF中节Ҏ有removeNodeҎQ必M用如下方?node.parentNode.removeChild(node)
11.const 问题
(1)现有问题:
?IE 中不能?const 关键字。如 const constVar = 32; 在IE中这是语法错误?br />(2)解决Ҏ:
不?const Q以 var 代替?
12. body 对象
MF的body在body标签没有被浏览器完全d之前存在,而IE则必dbody完全被读入之后才存在
13. url encoding
在js中如果书写urlq接写&不要?amp;例如var url = ‘xx.jsp?objectName=xx&objectEvent=xxx?
frm.action = url那么很有可能url不会被正常显CZ至于参数没有正确的传到服务器
一般会服务器报错参数没有找?br />当然如果是在tpl中例外,因ؓtpl中符合xml规范Q要?amp;书写?amp;
一般MF无法识别js中的&
14. nodeName ?tagName 问题
(1)现有问题Q?br />在MF中,所有节点均?nodeName |?textNode 没有 tagName 倹{在 IE 中,nodeName 的用好?br />有问题(具体情况没有试Q但我的IE已经M好几ơ)?br />(2)解决ҎQ?br />使用 tagNameQ但应检其是否为空?
15. 元素属?br />IE?input.type属性ؓ只读Q但是MF下可以修?/font>
若日期正?q回true;否则q回false.
function checkDate(theDate){
var reg = /^\d{4}-((0{0,1}[1-9]{1})|(1[0-2]{1}))-((0{0,1}[1-9]{1})|([1-2]{1}[0-9]{1})|(3[0-1]{1}))$/;
var result=true;
if(!reg.test(theDate))
result = false;
else{
var arr_hd=theDate.split("-");
var dateTmp;
dateTmp= new Date(arr_hd[0],parseFloat(arr_hd[1])-1,parseFloat(arr_hd[2]));
if(dateTmp.getFullYear()!=parseFloat(arr_hd[0])
|| dateTmp.getMonth()!=parseFloat(arr_hd[1]) -1
|| dateTmp.getDate()!=parseFloat(arr_hd[2])){
result = false
}
}
return result;
}
///////////////////////////////基础处理函?/p>
function cekleap(input)//判断闰年
{
if(typeof(input)=="string")
{var y=input.substring(0,4);}
else
{var y=input}
if(y%4!=0)
{return false;}
else
{
if((y%100!=0)||(y%400==0)){return true;}
else{return false;}
}
}
function calMMDD(indays,leap)//知道天数日期且indays<=(365or366);leap为真为闰q?为假为^q?br />{
var a1=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
var a2=new Array(31,29,31,30,31,30,31,31,30,31,30,31);
var inN=indays;
var inL=leap;
switch(inL)
{
case true:{var aa=a2;break;}
case false:{var aa=a1;break;}
default:{break;}
}
var outO=new Object();
for(var i=0;i<12;i++)
{
if(inN<=aa[i])
{
outO.mm=i+1;
outO.dd=inN;
break;
}
else
{inN-=aa[i];}
}
return(outO);
}
function convertion(yy,mm,dd)//整理输出
{
switch(mm<10)
{
case true:{mm="0"+mm;break;}
default:{break;}
}
switch(dd<10)
{
case true:{dd="0"+dd;break;}
default:{break;}
}
var outS=yy+"-"+mm+"-"+dd;//格式可更?br />return(outS);
}
///////////////////////////////以后的日期
function addday(inputS,inputN) //inputS 的格?yyyy-mm-dd
{
// alert("l12");
var outS="";
var dis=inputN-0;//先处理下 转成数字
var yy=inputS.substring(0,4)-0;
var mm=inputS.substring(5,7)-0;
var dd=inputS.substring(8,10)-0;
//alert(yy);
//alert(mm);
//alert(dd);
var a1=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
var a2=new Array(31,29,31,30,31,30,31,31,30,31,30,31);
if(!cekleap(yy))
{
var aa=a1;
}
else
{
var aa=a2;
}
var tt=aa[mm-1]-dd; //本月剩下的天?
//alert(aa[mm-1]);
if(dis<=tt) //先处理本?br /> {
dd+=dis;
outS=convertion(yy,mm,dd);
return(outS);
}
else
{
mm+=1;
dis-=tt;
}
if(mm==13)//是否跨年
{
yy+=1;
mm=1;
if(!cekleap(yy))
{
aa=a1;
}
else
{
aa=a2;
}
}
for(var i=(mm-1);i<=11;i++) //接着后面处理
{
switch (i)
{
case 11: //判断是否?2?br /> {
// alert("laa");
if(dis<=aa[i])
{
outS=convertion(yy,(i+1),dis);
return(outS);
}
else
{
dis-=aa[i];
yy+=1;
if(!cekleap(yy))
{
aa=a1;
}
else
{
aa=a2;
}
i=-1; //跨年
}
break;
}
default:
{
// alert("l7");
if(dis<=aa[i])
{
outS=outS=convertion(yy,(i+1),dis);
// alert(outS);
return(outS);
}
else
{
dis-=aa[i];
}
break;
}
}
}
//alert("l10");
}
///////////////////////////////以前的日期
function subtractday(inputS,inputN) //inputS 的格?yyyy-mm-dd
{
var outS="";
var dis=inputN-0;
var yy=inputS.substring(0,4)-0;
var mm=inputS.substring(5,7)-0;
var dd=inputS.substring(8,10)-0;
var a1=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
var a2=new Array(31,29,31,30,31,30,31,31,30,31,30,31);
if(!cekleap(yy))
{
var aa=a1;
}
else
{
var aa=a2;
}
if(dis<dd) //先处理本?br /> {
outS=convertion(yy,mm,(dd-dis));
return(outS);
}
else
{mm-=1;
dis-=dd;}
if(mm==0)//看是否跨q?br />{
yy-=1;
mm=12;
if(!cekleap(yy))
{
aa=a1;
}
else
{
aa=a2;
}
}
for(var i=(mm-1);i>=0;i--) //接着后面处理
{
switch (i)
{
case 0: //判断是否??br /> {
if(dis<aa[i])
{
outS=convertion(yy,(i+1),(aa[i]-dis));
return(outS);
}
else
{
dis-=aa[i];
yy-=1;
if(!cekleap(yy))
{
aa=a1;
}
else
{
aa=a2;
}
i=12; //跨年
}
break;
}
default:
{
if(dis<aa[i])
{
outS=convertion(yy,(i+1),(aa[i]-dis));
return(outS);
}
else
{
dis-=aa[i];
}
break;
}
}
}
}
////////////////////////////////////间隔输入可正可负
function multiuseday(inputS,inputN) //inputS的格?yyyy-mm-dd inputN为天?可正可负) 估算l果旉不能早于1970.01.01或者超q?100q?br />{
var outS;
var indate=new Date(inputS.substring(0,4),(inputS.substring(5,7)-1),inputS.substring(8,10)); //L旉
var Stime=new Date(1970,00,01);//标准旉 //注意:?new Date 月䆾是从0开始的
var Tdis=indate-Stime+24*60*60*1000;//因ؓ?号开?所以要加一?br />var oneday=24*60*60*1000;
//alert("x1");
//alert(Tdis/oneday);
//alert("xX1");
//alert(indate/oneday);
var dis=(inputN-0)*24*60*60*1000;//换成毫秒
//alert("x11");
//alert(dis/oneday);
if(dis==0){return(inputS);}
dis=(Tdis+dis)/oneday;
//alert("x111");
//alert(dis);
var normalyear=365;
var leapyear=366;
var Ydis=0;//q间?br />var Ddis=0;//天间?br />var mmdd=new Object();//月䆾日号对象
if(dis<=normalyear)//1970q?br />{
Ddis+=dis;
mmdd=calMMDD(Ddis,false);
outS=convertion((1970+Ydis),mmdd.mm,mmdd.dd);////
return(outS);
}
if(dis<=(normalyear*2))//1971q?br />{
Ydis=1;
Ddis+=(dis-365);
mmdd=calMMDD(Ddis,false);
outS=convertion((1970+Ydis),mmdd.mm,mmdd.dd);////
return(outS);
}
//alert("x1111");
//alert(Ddis);
dis-=(normalyear*2);
//alert("bbb1");
//alert(dis);
//4q周期处??972闰年开?br />
Ydis=Math.floor(dis/(leapyear+normalyear*3));//注意处理数部分
Ydis=2+Ydis*4;//q的间隔
Ddis=Ddis+dis%(leapyear+normalyear*3); //落在一个周期内的天?/p>
//alert("x11111");
//alert(Ddis);
if(Ddis==0)//正好落在周期的最??Ҏ处理
{Ydis-=4;Ddis=1461;}
if(Ddis<=731) //做周期内判断 1?q?br />{
if(Ddis<=366)
{
mmdd=calMMDD(Ddis,true);
}
else
{
Ydis+=1;
Ddis-=366;
mmdd=calMMDD(Ddis,false);
}
}
else
{
if(Ddis<=1096)
{
Ydis+=2;
Ddis-=731;
mmdd=calMMDD(Ddis,false);
}
else
{
Ydis+=3;
Ddis-=1096;
mmdd=calMMDD(Ddis,false);
}
}
outS=convertion((1970+Ydis),mmdd.mm,mmdd.dd);////
return(outS);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function clka()
{
var mes=cekleap("2008");
alert(mes);
}
function add()
{
var obj01=document.getElementById("txt01");
var obj02=document.getElementById("txt02");
var obj03=document.getElementById("txt03");
obj03.value=addday(obj01.value,obj02.value);
}
function subtract()
{
var obj04=document.getElementById("txt04");
var obj05=document.getElementById("txt05");
var obj06=document.getElementById("txt06");
obj06.value=subtractday(obj04.value,obj05.value);
}
function multiuse()
{
var obj07=document.getElementById("txt07");
var obj08=document.getElementById("txt08");
var obj09=document.getElementById("txt09");
obj09.value=multiuseday(obj07.value,obj08.value);
}
</script>
</head>
<body>
<input type='text' id='txt01' name='txt01' size='20'> +
<input type='text' id='txt02' name='txt02' size='20'> =
<input type='text' id='txt03' name='txt03' size='20'> ADD控制
<br><br>
<input type='text' id='txt04' name='txt01' size='20'> -
<input type='text' id='txt05' name='txt02' size='20'> =
<input type='text' id='txt06' name='txt02' size='20'> SUB控制
<br><br>
<input type='text' id='txt07' name='txt07' size='20'>
<input type='text' id='txt08' name='txt08' size='20'>
<input type='text' id='txt09' name='txt09' size='20'> MULUSE控制
<br><br>
<input type='button' id='btn01' name='btn01' value=' ? >
<input type='button' id='btn02' name='btn02' value='L E A P' onClick='clka();'>
<input type='button' id='btn03' name='btn03' value='A D D' onClick='add();'>
<input type='button' id='btn04' name='btn04' value='S U B' onClick='subtract();'>
<input type='button' id='btn05' name='btn05' value='M U L' onClick='multiuse();'>
</body>
</html>
上面的代码经q本人的基本功能试 q勉强可以对付下 呵呵
year=now.getYear(); //得到q䆾
month=now.getMonth()+1; //得到月䆾
date=now.getDate(); //得到日期
day=now.getDay(); //得到星期?/p>
一个显C时间日期的函数Q?/p>
function clock()
{
var timeStr, dateStr;
now = new Date();
// time
hours = now.getHours();
minutes = now.getMinutes();
seconds = now.getSeconds();
if(hours < 10)
timeStr = "0"+hours;
else timeStr=hours;
if(minutes < 10)
timeStr+=":0"+minutes;
else timeStr+=":"+minutes;
if(seconds < 10)
timeStr+=":0"+seconds;
else timeStr+=":"+seconds;
document.clock.time.value=timeStr;
//date
year=now.getYear();
month=now.getMonth()+1;
date=now.getDate();
dateStr=year;
if(month<10)
dateStr+="/0"+month;
else dateStr+="/"+month;
if(date<10)
dateStr+="/0"+date;
else dateStr+="/"+date;
document.clock.date.value=dateStr;
Timer=setTimeout("clock()",1000);
}
</SCRIPT>