在jsp中引入My97DatePicker的WdatePicker.js出现Cannot read property 'substr' of null

背景

最近用到WdatePicker时间选择器
在进行时间选择器加载的时候,报错Cannot read property ‘substr’ of null
查阅WdatePicker.js发现bug部分的逻辑是查询所有的script标签,如果没有src属性就会报错

解决

通过修改js文件代码,完美解决~

赋上更改后的完整js如下

/*
 * My97 DatePicker 4.8 Beta1
 * License: http://www.my97.net/dp/license.asp
 * fix substr is null bug by razera 2018-11-27
 */
var $dp,WdatePicker;(function(){var $={
    $langList:[{
        name:"en",charset:"UTF-8"},
        {name:"zh-cn",charset:"gb2312"},
        {name:"zh-tw",charset:"GBK"}
    ],
    $skinList:[
        {name:"default",charset:"gb2312"},
        {name:"whyGreen",charset:"gb2312"},
    ],
    $wdate:true,
    $crossFrame:true,
    $preLoad:false,
    doubleCalendar:false,
    enableKeyboard:true,
    enableInputMask:true,
    autoUpdateOnChanged:null,
    whichDayIsfirstWeek:4,
    position:{},
    lang:"auto",
    skin:"default",
    dateFmt:"yyyy-MM-dd",
    realDateFmt:"yyyy-MM-dd",
    realTimeFmt:"HH:mm:ss",
    realFullFmt:"%Date %Time",
    minDate:"1900-01-01 00:00:00",
    maxDate:"2099-12-31 23:59:59",
    startDate:"",
    alwaysUseStartDate:false,
    yearOffset:1911,
    firstDayOfWeek:0,
    isShowWeek:false,
    highLineWeekDay:true,
    isShowClear:true,
    isShowToday:true,
    isShowOK:true,
    isShowOthers:true,
    readOnly:false,
    errDealMode:0,
    autoPickDate:null,
    qsEnabled:true,
    autoShowQS:false,

    specialDates:null,specialDays:null,disabledDates:null,disabledDays:null,opposite:false,errMsg:"",quickSel:[],has:{},getRealLang:function(){var _=$.$langList;for(var A=0;A<_.length;A++)if(_[A].name==this.lang)return _[A];return _[0]}};WdatePicker=T;var X=window,S={innerHTML:""},M="document",H="documentElement",C="getElementsByTagName",U,A,R,G,a,W=navigator.appName;if(W=="Microsoft Internet Explorer")R=true;else if(W=="Opera")a=true;else G=true;A=J();if($.$wdate)K(A+"skin/WdatePicker.css");U=X;if($.$crossFrame){try{while(U.parent&&U.parent[M]!=U[M]&&U.parent[M][C]("frameset").length==0)U=U.parent}catch(N){}}if(!U.$dp)U.$dp={ff:G,ie:R,opera:a,status:0,defMinDate:$.minDate,defMaxDate:$.maxDate};B();if($.$preLoad&&$dp.status==0)E(X,"onload",function(){T(null,true)});if(!X[M].docMD){E(X[M],"onmousedown",D);X[M].docMD=true}if(!U[M].docMD){E(U[M],"onmousedown",D);U[M].docMD=true}E(X,"onunload",function(){if($dp.dd)O($dp.dd,"none")});function B(){U.$dp=U.$dp||{};obj={$:function($){return(typeof $=="string")?X[M].getElementById($):$},$D:function($,_){return this.$DV(this.$($).value,_)},$DV:function(_,$){if(_!=""){this.dt=$dp.cal.splitDate(_,$dp.cal.dateFmt);if($)for(var B in $)if(this.dt[B]===undefined)this.errMsg="invalid property:"+B;else{this.dt[B]+=$[B];if(B=="M"){var C=$["M"]>0?1:0,A=new Date(this.dt["y"],this.dt["M"],0).getDate();this.dt["d"]=Math.min(A+C,this.dt["d"])}}if(this.dt.refresh())return this.dt}return""},show:function(){var A=U[M].getElementsByTagName("div"),$=100000;for(var B=0;B<A.length;B++){var _=parseInt(A[B].style.zIndex);if(_>$)$=_}this.dd.style.zIndex=$+2;O(this.dd,"block")},hide:function(){O(this.dd,"none")},attachEvent:E};for(var $ in obj)U.$dp[$]=obj[$];$dp=U.$dp}function E(A,$,_){if(R)A.attachEvent($,_);else if(_){var B=$.replace(/on/,"");_._ieEmuEventHandler=function($){return _($)};A.addEventListener(B,_._ieEmuEventHandler,false)}}function J(){var _,A,$=X[M][C]("script");for(var B=0;B<$.length;B++){_=$[B].getAttribute("src");if(_==null){continue;}_=_.substr(0,_.toLowerCase().indexOf("wdatepicker.js"));A=_.lastIndexOf("/");if(A>0)_=_.substring(0,A+1);if(_)break}return _}function K(A,$,B){var D=X[M][C]("HEAD").item(0),_=X[M].createElement("link");if(D){_.href=A;_.rel="stylesheet";_.type="text/css";if($)_.title=$;if(B)_.charset=B;D.appendChild(_)}}function F($){$=$||U;var A=0,_=0;while($!=U){var D=$.parent[M][C]("iframe");for(var F=0;F<D.length;F++){try{if(D[F].contentWindow==$){var E=V(D[F]);A+=E.left;_+=E.top;break}}catch(B){}}$=$.parent}return{"leftM":A,"topM":_}}function V(F){if(F.getBoundingClientRect)return F.getBoundingClientRect();else{var A={ROOT_TAG:/^body|html$/i,OP_SCROLL:/^(?:inline|table-row)$/i},E=false,H=null,_=F.offsetTop,G=F.offsetLeft,D=F.offsetWidth,B=F.offsetHeight,C=F.offsetParent;if(C!=F)while(C){G+=C.offsetLeft;_+=C.offsetTop;if(Q(C,"position").toLowerCase()=="fixed")E=true;else if(C.tagName.toLowerCase()=="body")H=C.ownerDocument.defaultView;C=C.offsetParent}C=F.parentNode;while(C.tagName&&!A.ROOT_TAG.test(C.tagName)){if(C.scrollTop||C.scrollLeft)if(!A.OP_SCROLL.test(O(C)))if(!a||C.style.overflow!=="visible"){G-=C.scrollLeft;_-=C.scrollTop}C=C.parentNode}if(!E){var $=Z(H);G-=$.left;_-=$.top}D+=G;B+=_;return{"left":G,"top":_,"right":D,"bottom":B}}}function L($){$=$||U;var B=$[M],A=($.innerWidth)?$.innerWidth:(B[H]&&B[H].clientWidth)?B[H].clientWidth:B.body.offsetWidth,_=($.innerHeight)?$.innerHeight:(B[H]&&B[H].clientHeight)?B[H].clientHeight:B.body.offsetHeight;return{"width":A,"height":_}}function Z($){$=$||U;var B=$[M],A=B[H],_=B.body;B=(A&&A.scrollTop!=null&&(A.scrollTop>_.scrollTop||A.scrollLeft>_.scrollLeft))?A:_;return{"top":B.scrollTop,"left":B.scrollLeft}}function D($){var _=$?($.srcElement||$.target):null;try{if($dp.cal&&!$dp.eCont&&$dp.dd&&_!=$dp.el&&$dp.dd.style.display=="block")$dp.cal.close()}catch($){}}function Y(){$dp.status=2}var P,_;function T(L,D){$dp.win=X;B();L=L||{};for(var J in $)if(J.substring(0,1)!="$"&&L[J]===undefined)L[J]=$[J];if(D){if(!K()){_=_||setInterval(function(){if(U[M].readyState=="complete")clearInterval(_);T(null,true)},50);return}if($dp.status==0){$dp.status=1;L.el=S;I(L,true)}else return}else if(L.eCont){L.eCont=$dp.$(L.eCont);L.el=S;L.autoPickDate=true;L.qsEnabled=false;I(L)}else{if($.$preLoad&&$dp.status!=2)return;var H=F();if(H){L.srcEl=H.srcElement||H.target;H.cancelBubble=true}L.el=L.el=$dp.$(L.el||L.srcEl);if(!L.el||L.el["My97Mark"]===true||L.el.disabled||($dp.dd&&O($dp.dd)!="none"&&$dp.dd.style.left!="-970px")){L.el["My97Mark"]=false;return}I(L);if(H&&L.el.nodeType==1&&L.el["My97Mark"]===undefined){L.el["My97Mark"]=false;var A,C;if(H.type=="focus"){A="onclick";C="onfocus"}else{A="onfocus";C="onclick"}E(L.el,A,L.el[C])}}function K(){if(R&&U!=X&&U[M].readyState!="complete")return false;return true}function F(){if(G){func=F.caller;while(func!=null){var $=func.arguments[0];if($&&($+"").indexOf("Event")>=0)return $;func=func.caller}return null}return event}}function Q(_,$){return _.currentStyle?_.currentStyle[$]:document.defaultView.getComputedStyle(_,false)[$]}function O(_,$){if(_)if($!=null)_.style.display=$;else return Q(_,"display")}function I(G,_){var D=G.el?G.el.nodeName:"INPUT";if(_||G.eCont||new RegExp(/input|textarea|div|span|p|a/ig).test(D))G.elProp=D=="INPUT"?"value":"innerHTML";else return;if(G.lang=="auto")G.lang=R?navigator.browserLanguage.toLowerCase():navigator.language.toLowerCase();if(!G.eCont)for(var C in G)$dp[C]=G[C];if(!$dp.dd||G.eCont||($dp.dd&&(G.getRealLang().name!=$dp.dd.lang||G.skin!=$dp.dd.skin))){if(G.eCont)E(G.eCont,G);else{$dp.dd=U[M].createElement("DIV");$dp.dd.style.cssText="position:absolute";U[M].body.appendChild($dp.dd);E($dp.dd,G);if(_)$dp.dd.style.left=$dp.dd.style.top="-970px";else{$dp.show();B($dp)}}}else if($dp.cal){$dp.show();$dp.cal.init();if(!$dp.eCont)B($dp)}function E(F,E){F.innerHTML="<iframe hideFocus=true width=97 height=9 frameborder=0 border=0 scrolling=no></iframe>";var D=F.lastChild.contentWindow[M],_=$.$langList,C=$.$skinList,H=E.getRealLang();F.lang=H.name;F.skin=E.skin;var G=["<head><script>document.oncontextmenu=function(){return false;};","var $d, $dp, $cfg=document.cfg, $pdp = parent.$dp, $dt, $tdt, $sdt, $lastInput, $IE=$pdp.ie, $FF = $pdp.ff,$OPERA=$pdp.opera, $ny, $cMark = false;","if($cfg.eCont) {$dp = {};for(var p in $pdp) {$dp[p] = $pdp[p];}}else{$dp = $pdp;};for (var p in $cfg) {$dp[p] = $cfg[p];};","</script><script src=",A,"lang/",H.name,".js charset=",H.charset,"></script>"];for(var I=0;I<C.length;I++)if(C[I].name==E.skin)G.push("<link rel=\"stylesheet\" type=\"text/css\" href=\""+A+"skin/"+C[I].name+"/datepicker.css\" charset=\""+C[I].charset+"\"/>");G.push("<script type=\"text/javascript\" src=\""+A+"calendar.js?\"+Math.random()+\" charset=\"gb2312\"></script>");G.push("</head><body leftmargin=\"0\" topmargin=\"0\" tabindex=0></body></html>");G.push("<script>var t;t=t||setInterval(function(){if(document.ready){new My97DP();$cfg.onload();$c.autoSize();$cfg.setPos($dp);clearInterval(t);}},20);if($FF||$OPERA)document.close();</script>");E.setPos=B;E.onload=Y;D.write("<html>");D.cfg=E;D.write(G.join(""))}function B(I){var G=I.position.left,B=I.position.top,C=I.el;if(C==S)return;if(C!=I.srcEl&&(O(C)=="none"||C.type=="hidden"))C=I.srcEl;var H=V(C),$=F(X),D=L(U),A=Z(U),E=$dp.dd.offsetHeight,_=$dp.dd.offsetWidth;if(isNaN(B))B=0;if(B!="under"&&(($.topM+H.bottom+E>D.height)&&($.topM+H.top-E>0)))B+=A.top+$.topM+H.top-E-2;else B+=A.top+$.topM+Math.min(H.bottom,D.height-E)+2;if(isNaN(G))G=0;G+=A.left+Math.min($.leftM+H.left,D.width-_-5)-(R?2:0);I.dd.style.top=B+"px";I.dd.style.left=G+"px"}}})()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: my97datepicker/4.8/wdatepicker.js是一个用于实现日期选择的JavaScript插件。它基于My97 DatePicker开发,提供了丰富的日期选择功能和样式定制选项。 这个插件可以用于网页的日期选择控件,使用户能够方便地从一个日历选择日期。它可以用于各种场景,比如用户生日选择、预定会议时间、预约医生等。在使用这个插件之前,需要在页面引入相应的JavaScript文件,并将日期选择控件的HTML元素与插件绑定。 wdatepicker.js提供了一些日期选择的基本功能,比如切换月份、选择日期、上下翻页等。它还可以根据具体需求进行样式定制,包括日期的外观、选择范围、禁用某些日期等。通过设置插件的参数,可以实现个性化和灵活的日期选择控件。 这个插件还支持多种日期格式的输入和显示,可以根据需要自定义日期的显示方式。同时,它还提供了一些常用的日期操作和计算功能,比如获取当前日期、判断两个日期的大小比较等。 总之,my97datepicker/4.8/wdatepicker.js是一个功能丰富、灵活易用的日期选择插件,可以帮助开发人员简化日期选择的操作,提高用户体验。无论在哪个行业或场景使用,都可以在网页轻松实现日期选择的功能。 ### 回答2: my97datepicker/4.8/wdatepicker.js是一个用于日期选择的Javascript插件。该插件基于My97DatePicker,提供了丰富的日期选择功能和样式定制选项。 使用该插件,可以在网页方便地添加日期选择器,让用户可以直接从日历选择日期。日期选择器可以显示当前日期、月份和年份,用户可以通过点击日历上的日期来选择特定日期。该插件还支持快捷选择功能,例如可以选择某个月的第一天或最后一天。 此外,wdatepicker.js还具有一些其他的特性,例如可以禁用特定日期,设置日期的最大和最小可选范围,以及自定义日期的显示格式。插件还支持多语言,可以根据需要切换不同的语言版本。 对于开发人员来说,wdatepicker.js提供了丰富的API接口,可以通过编程方式控制日期选择器的行为。可以动态设置日期选择器的默认日期、最大最小可选范围、显示格式等。此外,还可以通过回调函数来处理用户选择日期后的操作。 总之,my97datepicker/4.8/wdatepicker.js是一个功能强大、灵活易用的日期选择插件,可以方便地在网页添加日期选择功能,提升用户体验。 ### 回答3: my97datepicker/4.8/wdatepicker.js 是一个用于日期选择的JavaScript插件。该插件是基于My97 DatePicker开发的,用于在网页添加日期选择功能。 使用该插件前,你需要在网页引入wdatepicker.js文件。然后,可以在需要添加日期选择的文本框或其他元素上调用相关的函数,以创建一个日历窗口。 该插件提供了丰富的功能,包括日期选择、时间选择、范围选择等。你可以自定义日历的外观和行为,通过传递不同的参数来实现不同的效果。 在使用过程,你可以根据自己的需求,设置日期的格式、起始日期、语言等。同时,该插件还提供了一些事件回调函数,用于处理日期选择后的操作。 wdatepicker.js兼容多种浏览器,包括IE、火狐、谷歌等主流浏览器,可以在各种网页项目灵活使用。 总的来说,my97datepicker/4.8/wdatepicker.js 是一个方便实用的日期选择插件,可以轻松地在网页添加日期选择功能,提升用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值