JavaScript Datepicker issue in IE11 - crossobj.visibility="hidden"; -
our application dealer based application. implemented ie8 browser, since dealers upgrading ie11, facing lot of issues (majorly in ui) in application. 1 among issue date picker.
when user clicks on date picker in ie11 browser (compatible mode) date picker popup shows whereas when user clicks on date picker in ie11 browser (non compatible mode) there no action performed. when tried debugged using developer tools in ie browser, found error in console "script5007: unable set property 'visibility' of undefined or null reference" points piece of code "crossobj.visibility="hidden";" in function hidecalendar(). have tried searching similar kind of issue in google, didn't find posting on here. please error , help me resolve this.
please find below total code of date picker:
<script> var pathurl = '<%=request.getcontextpath()%>'; var fixedx = -1; // x position (-1 if appear below control) var fixedy = -1; // y position (-1 if appear below control) var startat = 1; // 0 - sunday ; 1 - mon var showweeknumber = 0; // 0 - don't show; 1 - show var showtoday = 0; // 0 - don't show; 1 - show var imgdir = "/dimsweb/images/"; // directory images ... e.g. var imgdir="/img/" var titlebar="#969798"; var highlight="#ffcc99"; var gotostring = "go current month"; var todaystring = "today is"; var weekstring = "wk"; var scrollleftmessage = "click scroll previous month. hold mouse button scroll automatically."; var scrollrightmessage = "click scroll next month. hold mouse button scroll automatically."; var selectmonthmessage = "click select month."; var selectyearmessage = "click select year."; var selectdatemessage = "select [date] date."; // not replace [date], replaced date. var crossobj, crossmonthobj, crossyearobj, monthselected, yearselected, dateselected, omonthselected, oyearselected, odateselected, monthconstructed, yearconstructed, intervalid1, intervalid2, timeoutid1, timeoutid2, ctltoplacevalue, ctlnow, dateformat, nstartingyear; var bpageloaded=false; var ie=document.all; var dom=document.getelementbyid; var ns4=document.layers; var today = new date(); var datenow = today.getdate(); var monthnow = today.getmonth(); var yearnow = today.getfullyear(); var imgsrc = new array("drop1.gif","drop2.gif","left1.gif","left2.gif","right1.gif","right2.gif"); var img = new array(); var bshow = false; var calval; /* hides <select> , <applet> objects (for ie only) */ function hideelement( elmid, overdiv ) { if( ie ) { for( = 0; < document.all.tags( elmid ).length; i++ ) { obj = document.all.tags( elmid )[i]; if( !obj || !obj.offsetparent ) { continue; } // find element's offsettop , offsetleft relative body tag. objleft = obj.offsetleft; objtop = obj.offsettop; objparent = obj.offsetparent; while( objparent.tagname.touppercase() != "body" ) { objleft += objparent.offsetleft; objtop += objparent.offsettop; objparent = objparent.offsetparent; } objheight = obj.offsetheight; objwidth = obj.offsetwidth; if(( overdiv.offsetleft + overdiv.offsetwidth ) <= objleft ); else if(( overdiv.offsettop + overdiv.offsetheight ) <= objtop ); else if( overdiv.offsettop >= ( objtop + objheight )); else if( overdiv.offsetleft >= ( objleft + objwidth )); else { obj.style.visibility = "hidden"; } } } } /* * unhides <select> , <applet> objects (for ie only) */ function showelement( elmid ) { if( ie ) { for( = 0; < document.all.tags( elmid ).length; i++ ) { obj = document.all.tags( elmid )[i]; if( !obj || !obj.offsetparent ) { continue; } obj.style.visibility = ""; } } } if (dom) { (i=0;i<imgsrc.length;i++) { img[i] = new image img[i].src = imgdir + imgsrc[i] ///alert(img[i].src); } //modified subhadip:on 07thaugust,2006 document.write ("<div onclick='bshow=true' id='calendar' style='z-index:+999;position:absolute;visibility:hidden;width:100px'><table bgcolor='#969798' style='font-family:arial;font-size:10px;border-width:1;border-style:solid;border-color:#a0a0a0;font-family:arial; font-size:10px}' bgcolor='#ffffff'><tr bgcolor='" + titlebar + "'><td><table><tr><td style='padding:2px;font-family:arial; font-size:11px;'><font color='#ffffff'><b><span id='caption'></span></b></font></td><td align=right><a href='javascript:hidecalendar()'><img src='"+imgdir+"close.gif' width='15' height='13' border='0' alt='close calendar'></a></td></tr></table></td></tr><tr><td style='padding:5px' bgcolor=#ffffff><span id='content1'></span></td></tr>") //modified subhadip:on 07thaugust,2006 document.write ("</table></div><div id='selectmonth' style='z-index:+999;position:absolute;visibility:hidden;width:65px'></div><div id='selectyear' style='z-index:+999;position:absolute;visibility:hidden;width:45px'></div>"); } //var monthname = new array("jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec") var jan_key="<dimsbean:message key='january' langcode='${language}'></dimsbean:message>"; var feb_key="<dimsbean:message key='february' langcode='${language}'></dimsbean:message>"; var mar_key="<dimsbean:message key='march' langcode='${language}'></dimsbean:message>"; var april_key="<dimsbean:message key='april' langcode='${language}'></dimsbean:message>"; var may_key="<dimsbean:message key='may' langcode='${language}'></dimsbean:message>"; var june_key="<dimsbean:message key='june' langcode='${language}'></dimsbean:message>"; var july_key="<dimsbean:message key='july' langcode='${language}'></dimsbean:message>"; var aug_key="<dimsbean:message key='august' langcode='${language}'></dimsbean:message>"; var sep_key="<dimsbean:message key='september' langcode='${language}'></dimsbean:message>"; var oct_key="<dimsbean:message key='october' langcode='${language}'></dimsbean:message>"; var nov_key="<dimsbean:message key='november' langcode='${language}'></dimsbean:message>"; var dec_key="<dimsbean:message key='december' langcode='${language}'></dimsbean:message>"; var sun_key="<dimsbean:message key='sunday' langcode='${language}'></dimsbean:message>"; var mon_key="<dimsbean:message key='monday' langcode='${language}'></dimsbean:message>"; var tue_key="<dimsbean:message key='tuesday' langcode='${language}'></dimsbean:message>"; var wed_key="<dimsbean:message key='wednesday' langcode='${language}'></dimsbean:message>"; var thur_key="<dimsbean:message key='thursday' langcode='${language}'></dimsbean:message>"; var fri_key="<dimsbean:message key='friday' langcode='${language}'></dimsbean:message>"; var sat_key="<dimsbean:message key='saturday' langcode='${language}'></dimsbean:message>"; var monthname = new array(jan_key,feb_key,mar_key,april_key,may_key,june_key,july_key,aug_key,sep_key,oct_key,nov_key,dec_key); if (startat==0) { dayname = new array (sun_key,mon_key,tue_key,wed_key,thur_key,fri_key,sat_key) } else { dayname = new array (mon_key,tue_key,wed_key,thur_key,fri_key,sat_key,sun_key) } var styleanchor="text-decoration:none;color:black;" var stylelightborder="border-style:solid;border-width:1px;border-color:#a0a0a0;" function swapimage(srcimg, destimg){ if (ie) { document.getelementbyid(srcimg).setattribute("src",imgdir + destimg) } } function init() { if (!ns4) { if (!ie) { yearnow += 1900; } crossobj=(dom)?document.getelementbyid("calendar").style : ie? document.all.calendar : document.calendar; hidecalendar(); crossmonthobj=(dom)?document.getelementbyid("selectmonth").style : ie? document.all.selectmonth : document.selectmonth; crossyearobj=(dom)?document.getelementbyid("selectyear").style : ie? document.all.selectyear : document.selectyear; monthconstructed=false; yearconstructed=false; shtml1="<span id='spanleft' style='border-style:solid;border-width:1;border-color:#dddddd;cursor:pointer' onmouseover='swapimage(\"changeleft\",\"left2.gif\");this.style.bordercolor=\"white\";window.status=\""+scrollleftmessage+"\"' onclick='javascript:decmonth()' onmouseout='clearinterval(intervalid1);swapimage(\"changeleft\",\"left1.gif\");this.style.bordercolor=\"#dddddd\";window.status=\"\"' onmousedown='cleartimeout(timeoutid1);timeoutid1=settimeout(\"startdecmonth()\",500)' onmouseup='cleartimeout(timeoutid1);clearinterval(intervalid1)'> <img id='changeleft' src='"+imgdir+"left1.gif' width=10 height=11 border=0> </span> "; shtml1+="<span id='spanright' style='border-style:solid;border-width:1;border-color:#dddddd;cursor:pointer' onmouseover='swapimage(\"changeright\",\"right2.gif\");this.style.bordercolor=\"white\";window.status=\""+scrollrightmessage+"\"' onmouseout='clearinterval(intervalid1);swapimage(\"changeright\",\"right1.gif\");this.style.bordercolor=\"#dddddd\";window.status=\"\"' onclick='incmonth()' onmousedown='cleartimeout(timeoutid1);timeoutid1=settimeout(\"startincmonth()\",500)' onmouseup='cleartimeout(timeoutid1);clearinterval(intervalid1)'> <img id='changeright' src='"+imgdir+"right1.gif' width=10 height=11 border=0> </span> "; shtml1+="<span id='spanmonth' style='border-style:solid;border-width:1;border-color:#dddddd;cursor:pointer' onmouseover='swapimage(\"changemonth\",\"drop2.gif\");this.style.bordercolor=\"white\";window.status=\""+selectmonthmessage+"\"' onmouseout='swapimage(\"changemonth\",\"drop1.gif\");this.style.bordercolor=\"#dddddd\";window.status=\"\"' onclick='popupmonth()'></span> "; shtml1+="<span id='spanyear' style='border-style:solid;border-width:1;border-color:#dddddd;cursor:pointer' onmouseover='swapimage(\"changeyear\",\"drop2.gif\");this.style.bordercolor=\"white\";window.status=\""+selectyearmessage+"\"' onmouseout='swapimage(\"changeyear\",\"drop1.gif\");this.style.bordercolor=\"#dddddd\";window.status=\"\"' onclick='popupyear()'></span> "; document.getelementbyid("caption").innerhtml = shtml1; bpageloaded=true; } } function hidecalendar() { crossobj.visibility="hidden"; if (crossmonthobj != null){crossmonthobj.visibility="hidden";} if (crossyearobj != null){crossyearobj.visibility="hidden";} showelement( 'select' ); showelement( 'applet' ); } function padzero(num) { homecoming (num < 10)? '0' + num : num ; } function constructdate(d,m,y) { stmp = dateformat stmp = stmp.replace ("dd","<e>") stmp = stmp.replace ("d","<d>") stmp = stmp.replace ("<e>",padzero(d)) stmp = stmp.replace ("<d>",d) stmp = stmp.replace ("mmm","<o>") stmp = stmp.replace ("mm","<n>") stmp = stmp.replace ("m","<m>") stmp = stmp.replace ("<m>",m+1) stmp = stmp.replace ("<n>",padzero(m+1)) stmp = stmp.replace ("<o>",monthname[m]) stmp = stmp.replace ("yyyy",y) stmp = stmp.replace ("yy",y.tostring().substr(2,2)) homecoming stmp } function closecalendar() { var stmp hidecalendar(); //ctltoplacevalue.value = constructdate(dateselected,monthselected,yearselected.tostring().substr(2,2)) ctltoplacevalue.value = constructdate(dateselected,monthselected,yearselected.tostring()) calval=ctltoplacevalue.value; } /*** month pulldown ***/ function startdecmonth() { intervalid1=setinterval("decmonth()",80) } function startincmonth() { intervalid1=setinterval("incmonth()",80) } function incmonth () { monthselected++ if (monthselected>11) { monthselected=0 yearselected++ } constructcalendar() } function decmonth () { monthselected-- if (monthselected<0) { monthselected=11 yearselected-- } constructcalendar() } function constructmonth() { popdownyear() if (!monthconstructed) { shtml = "" (i=0; i<12; i++) { sname = monthname[i]; if (i==monthselected){ sname = "<b>" + sname + "</b>" } shtml += "<tr><td id='m" + + "' onmouseover='this.style.backgroundcolor=\"#dddddd\"' onmouseout='this.style.backgroundcolor=\"\"' style='cursor:pointer' onclick='monthconstructed=false;monthselected=" + + ";constructcalendar();popdownmonth();event.cancelbubble=true'> " + sname + " </td></tr>" } document.getelementbyid("selectmonth").innerhtml = "<table width=70 style='font-family:arial; font-size:11px; border-width:1; border-style:solid; border-color:#a0a0a0;' bgcolor='white' cellspacing=0 onmouseover='cleartimeout(timeoutid1)' onmouseout='cleartimeout(timeoutid1);timeoutid1=settimeout(\"popdownmonth()\",100);event.cancelbubble=true'>" + shtml + "</table>" monthconstructed=true } } function popupmonth() { constructmonth() crossmonthobj.visibility = (dom||ie)? "visible" : "show" crossmonthobj.left = parseint(crossobj.left) + 50 crossmonthobj.top = parseint(crossobj.top) + 26 hideelement( 'select', document.getelementbyid("selectmonth") ); hideelement( 'applet', document.getelementbyid("selectmonth") ); } function popdownmonth() { crossmonthobj.visibility= "hidden" } /*** year pulldown ***/ function incyear() { (i=0; i<7; i++){ newyear = (i+nstartingyear)+1 if (newyear==yearselected) { txtyear = " <b>" + newyear + "</b> " } else { txtyear = " " + newyear + " " } document.getelementbyid("y"+i).innerhtml = txtyear } nstartingyear ++; bshow=true } function decyear() { (i=0; i<7; i++){ newyear = (i+nstartingyear)-1 if (newyear==yearselected) { txtyear = " <b>" + newyear + "</b> " } else { txtyear = " " + newyear + " " } document.getelementbyid("y"+i).innerhtml = txtyear } nstartingyear --; bshow=true } function selectyear(nyear) { yearselected=parseint(nyear+nstartingyear); yearconstructed=false; constructcalendar(); popdownyear(); } function constructyear() { popdownmonth() shtml = "" if (!yearconstructed) { shtml = "<tr><td align='center' onmouseover='this.style.backgroundcolor=\"white\"' onmouseout='clearinterval(intervalid1);this.style.backgroundcolor=\"\"' style='cursor:pointer' onmousedown='clearinterval(intervalid1);intervalid1=setinterval(\"decyear()\",30)' onmouseup='clearinterval(intervalid1)'>-</td></tr>" j = 0 nstartingyear = yearselected-3 (i=(yearselected-3); i<=(yearselected+3); i++) { sname = i; if (i==yearselected){ sname = "<b>" + sname + "</b>" } shtml += "<tr><td id='y" + j + "' onmouseover='this.style.backgroundcolor=\"#dddddd\"' onmouseout='this.style.backgroundcolor=\"\"' style='cursor:pointer' onclick='selectyear("+j+");event.cancelbubble=true'> " + sname + " </td></tr>" j ++; } shtml += "<tr><td align='center' onmouseover='this.style.backgroundcolor=\"white\"' onmouseout='clearinterval(intervalid2);this.style.backgroundcolor=\"\"' style='cursor:pointer' onmousedown='clearinterval(intervalid2);intervalid2=setinterval(\"incyear()\",30)' onmouseup='clearinterval(intervalid2)'>+</td></tr>" document.getelementbyid("selectyear").innerhtml = "<table width=44 style='font-family:arial; font-size:11px; border-width:1; border-style:solid; border-color:#a0a0a0;' bgcolor='white' onmouseover='cleartimeout(timeoutid2)' onmouseout='cleartimeout(timeoutid2);timeoutid2=settimeout(\"popdownyear()\",100)' cellspacing=0>" + shtml + "</table>" yearconstructed = true } } function popdownyear() { clearinterval(intervalid1) cleartimeout(timeoutid1) clearinterval(intervalid2) cleartimeout(timeoutid2) crossyearobj.visibility= "hidden" } function popupyear() { var leftoffset constructyear() crossyearobj.visibility = (dom||ie)? "visible" : "show" leftoffset = parseint(crossobj.left) + document.getelementbyid("spanyear").offsetleft if (ie) { leftoffset += 6 } crossyearobj.left = leftoffset crossyearobj.top = parseint(crossobj.top) + 26 } /*** calendar ***/ function constructcalendar () { var anumdays = array (31,0,31,30,31,30,31,31,30,31,30,31) var datemessage var startdate = new date (yearselected,monthselected,1) var enddate var colcolour="bgcolor=white"; var bswitch; var nmax; if (monthselected==1) { enddate = new date (yearselected,monthselected+1,1); enddate = new date (enddate - (24*60*60*1000)); numdaysinmonth = enddate.getdate() } else { numdaysinmonth = anumdays[monthselected]; } datepointer = 0 daypointer = startdate.getday() - startat if (daypointer<0) { daypointer = 6 } shtml = "<table border=1 cellspacing=0 style='font-family:arial;font-size:10px;'><tr>" //set row of day headings (i=0; i<7; i++) { shtml += "<td width='27' align='right' bgcolor='#dddddd'><b>"+ dayname[i].substr(0,3)+"</b></td>" } shtml +="</tr><tr>" //fill in empty columns before start day ( var i=1; i<=daypointer;i++ ) { if ((i%2)) shtml += "<td bgcolor='white'> </td>" else shtml += "<td bgcolor='#dddddd'> </td>" } if (daypointer%2) bswitch=false; else bswitch=true; ( datepointer=1; datepointer<=numdaysinmonth; datepointer++ ) { daypointer++; if (bswitch) colcolour=" bgcolor='white'"; else colcolour=" bgcolor='#dddddd'"; shtml += "<td align=right" + colcolour + ">" sstyle=styleanchor if ((datepointer==odateselected) && (monthselected==omonthselected) && (yearselected==oyearselected)) { sstyle+=stylelightborder } shint = "" var regexp= /\"/g shint=shint.replace(regexp,""") datemessage = "onmousemove='window.status=\""+selectdatemessage.replace("[date]",constructdate(datepointer,monthselected,yearselected))+"\"' onmouseout='window.status=\"\"' " if ((datepointer==datenow)&&(monthselected==monthnow)&&(yearselected==yearnow)) { shtml += "<b><a "+datemessage+" title=\"" + shint + "\" style='"+sstyle+"' href='javascript:dateselected="+datepointer+";closecalendar();'><font color=#ff0000> " + datepointer + "</font> </a></b>"} else if (daypointer % 7 == (startat * -1)+1) //sunday { shtml += "<a "+datemessage+" title=\"" + shint + "\" style='"+sstyle+"' href='javascript:dateselected="+datepointer + ";closecalendar();'> <font color=#909090>" + datepointer + "</font> </a>" } else { shtml += "<a "+datemessage+" title=\"" + shint + "\" style='"+sstyle+"' href='javascript:dateselected="+datepointer + ";closecalendar();'> " + datepointer + " </a>" } bswitch=!bswitch shtml += "" if ((daypointer+startat) % 7 == startat) { bswitch=true; shtml += "</tr><tr>" } } //add on many empty cells required fill row if (daypointer > 35) nmax = 42; else nmax = 35; ( var i=1; i<=(nmax-daypointer);i++ ) { if (bswitch) shtml += "<td bgcolor='white'> </td>" else shtml += "<td bgcolor='#dddddd'> </td>" bswitch=!bswitch } document.getelementbyid("content1").innerhtml = shtml document.getelementbyid("spanmonth").innerhtml = " " + monthname[monthselected] + " <img id='changemonth' src='/dimsweb/images/drop1.gif' width='12' height='10' border=0>" document.getelementbyid("spanyear").innerhtml = " " + yearselected + " <img id='changeyear' src='/dimsweb/images/drop1.gif' width='12' height='10' border=0>" } function popupcalendar(ctl, ctl2, format) { var leftpos=0 var toppos=0 if (bpageloaded) { if ( crossobj.visibility == "hidden" ) { ctltoplacevalue = ctl2 dateformat=format; formatchar = " " aformat = dateformat.split(formatchar) if (aformat.length<3) { formatchar = "/" aformat = dateformat.split(formatchar) if (aformat.length<3) { formatchar = "." aformat = dateformat.split(formatchar) if (aformat.length<3) { formatchar = "-" aformat = dateformat.split(formatchar) if (aformat.length<3) { // invalid date format formatchar="" } } } } tokenschanged = 0 if ( formatchar != "" ) { // utilize user's date adata = ctl2.value.split(formatchar) (i=0;i<3;i++) { if ((aformat[i]=="d") || (aformat[i]=="dd")) { dateselected = parseint(adata[i], 10) tokenschanged ++ } else if ((aformat[i]=="m") || (aformat[i]=="mm")) { monthselected = parseint(adata[i], 10) - 1 tokenschanged ++ } else if (aformat[i]=="yyyy") { yearselected = parseint(adata[i], 10) tokenschanged ++ } else if (aformat[i]=="yy") { if (adata[i]>50) { tempyear = parseint(1900 + parseint(adata[i])) } else { tempyear = parseint(2000 + parseint(adata[i])) } yearselected = parseint(tempyear, 10) tokenschanged ++ } else if (aformat[i]=="mmm") { (j=0; j<12; j++) { if (adata[i]==monthname[j]) { monthselected=j tokenschanged ++ } } } } } if ((tokenschanged!=3)||isnan(dateselected)||isnan(monthselected)||isnan(yearselected)) { dateselected = datenow monthselected = monthnow yearselected = yearnow } odateselected=dateselected omonthselected=monthselected oyearselected=yearselected atag = ctl { atag = atag.offsetparent; if(atag.offsetleft>=600){ leftpos += (atag.offsetleft-200); } else{ leftpos += atag.offsetleft; } toppos += atag.offsettop; } while(atag.tagname!="body"); crossobj.left = fixedx==-1 ? ctl.offsetleft + leftpos : fixedx crossobj.top = fixedy==-1 ? ctl.offsettop + toppos + ctl.offsetheight + 2 : fixedy constructcalendar (1, monthselected, yearselected); crossobj.visibility=(dom||ie)? "visible" : "show" hideelement( 'select', document.getelementbyid("calendar") ); hideelement( 'applet', document.getelementbyid("calendar") ); bshow = true; } else { hidecalendar() if (ctlnow!=ctl) {popupcalendar(ctl, ctl2, format);} } ctlnow = ctl; } homecoming calval; } document.onkeypress = function hidecal1 () { if (event.keycode==27) { hidecalendar(); } } document.onclick = function hidecal2 () { if (!bshow) { hidecalendar(); } bshow = false } if(ie) { init() } else { window.onload=init } function navigate(obj,strurl,plsenterudate,nopastudate,notvalidyr){ var index = obj.getelementbyid("sellocationcode").selectedindex; var sellocation = obj.getelementbyid("sellocationcode").options(index).value; var selcodedesc = sellocation.split(","); obj.getelementbyid("hdlocationcode").value=selcodedesc[0]; obj.getelementbyid("hdlocationdesc").value=selcodedesc[1]; //frmlocunavailadd_onsubmit(obj); if(frmlocunavailadd_onsubmit(obj,plsenterudate,nopastudate,notvalidyr)) { obj.frmlocunavailadd.action = strurl; obj.frmlocunavailadd.submit(); } } function navigate1(obj,strurl,plsenterudate,nopastudate,notvalidyr){ //frmlocunavailadd_onsubmit(obj); if(frmlocunavailadd_onsubmit(obj,plsenterudate,nopastudate,notvalidyr)) { obj.frmlocunavailadd.action = strurl; obj.frmlocunavailadd.submit(); } } </script> please note, 1. cannot inquire dealer turn on compatibility mode , start using application need code prepare resolve issue. 2. tried using doctype tag resolve didn't help. 3. have removed few functions @ end character length restriction.
thanks in advance help.
the problem have ie-specific code in there setting crossobj.
crossobj=(dom)?document.getelementbyid("calendar").style : ie? document.all.calendar : document.calendar; in above line of code, checks variable called ie determine whether browser ie, , if so, runs different code other browsers.
the problem code ie11 much more standards-compliant older ie versions, , doesn't need kind of code @ all.
(in fact, ie8 shouldn't need in case; it's aimed @ much older versions that. , note have browser checks ns4 in there, tells me original script old code)
my advice consider replacing whole code more modern , up-to-date calendar control. there plenty available work in current browsers , should easy plug site.
if absolutely must maintain existing code, quick , dirty prepare find place sets ie variable, , alter browser detection detects ie8 , before (or whatever versions work it, ie11 isn't detected ie , acts 'normal' browser. prepare issue @ hand, may have other unintended consequences, i'd suggest you're improve off going through code , ripping out browser detection stuff. guess of exclusively unnecessary ie8. there may rewriting done result of that, it's not bad thing given age of code.
if find needing browser-specific code, consider using tool modernizr observe back upwards given feature rather direct browser detection.
hope helps.
javascript datepicker internet-explorer-11
No comments:
Post a Comment