laydate 在 ie 浏览器中无法弹出

Posted wanghui05

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了laydate 在 ie 浏览器中无法弹出相关的知识,希望对你有一定的参考价值。

背景:目前项目使用 Angular 开发,里面引入了 laydate.js 做日期控件。

问题:最近项目从 Angular8 升级到了 Angular9,发现升级之后在 IE 里面不能打开日期弹框了。

原因:经过一系列的调试操作之后终于发现,Angular9 的 script 标签都使用了 defer,在 laydate.js 加载的时候他们并没有加载完毕,所以 laydate.js 中不能获取到当前正在加载的 script 的 src 值。这时候它会去获取最后一个 script 标签的 src 值,好死不死的是我们的主页里面最后一个 script 不是引入的,它没有 src 值,这时候 getPath 函数就返回 undefined 了,导致整个组件不加载。

解决:修改 getPath 方法,将获取 src 改成获取最后一个带 src 的 script 的src 值。

 

原来代码如下:

getPath: function(){
      var jsPath = document.currentScript ? document.currentScript.src : function(){
        var js = document.scripts
        ,last = js.length - 1
        ,src;
        for(var i = last; i > 0; i--){
          if(js[i].readyState === ‘interactive‘){
            src = js[i].src;
            break;
          }
        }
        return src || js[last].src;
      }();
      return jsPath.substring(0, jsPath.lastIndexOf(‘/‘) + 1);
}()

  

 

修改后的代码:

getPath: (function () {
                var jsPath = document.currentScript
                    ? document.currentScript.src
                    : (function () {
                          var js = document.scripts,
                              last = js.length - 1,
                              src;

                          for (var i = last; i > 0; i--) {
                              if (js[i].readyState === ‘interactive‘) {
                                  src = js[i].src;
                                  break;
                              }
                          }
                          var srcJs = [].slice
                              .call(js)
                              .filter(function (scriptItem) {
                                  return scriptItem.src;
                              });
                          return src || srcJs[srcJs.length - 1].src;
                      })();
                return jsPath.substring(0, jsPath.lastIndexOf(‘/‘) + 1);
})(),

 

以上是关于laydate 在 ie 浏览器中无法弹出的主要内容,如果未能解决你的问题,请参考以下文章

为啥在ie浏览器当文本框为空,可以弹出提示框,在firefox中无法弹出来

兼容ie8,firefox,chrome浏览器的代码片段

IE浏览器总是弹出对话框怎么处理

十条实用的jQuery代码片段

IE 老是弹出语法错误

解决laydate时间日期插件定位溢出