WenXiangShi 2022-01-07 11:24 采纳率: 86.5%
浏览 130
已结题

ie11浏览器 js报错,在其他浏览器都没问题,错误:SCRIPT1003: 缺少 ':'

问题遇到的现象和发生背景

使用的是IE11浏览器,出现问题的代码是我在网上找的一个时间选择器插件的js

问题相关代码

 XNDatepicker.prototype = {
        init() {          //提示就是第二行这里缺少“:”。 本人是后端开发 刚好钱短休产假了 就帮忙处理一下 头大 
            this.setCurrentTime({startTime: this.option.startTime, endTime: this.option.endTime})
            this.rendDatePicker();
            this.setPosition();
            this.addEvent();
            this.initCallback();
            this.initTimePicker();
            this.rendHoverStyle();
            this.setDate();
            this.confirm(false,true);
        },
运行结果及报错内容

img

function dynamicLoadJs(urllist) {
    for (let i = 0; i < urllist.length; i++) {

        let url = urllist[i];
        var head = document.getElementsByTagName('head')[0];
        var link = document.createElement('script');
        link.src = url;
        var finelurl = '<script type="text/javascript" src=' + url + '><\/script>'
        document.getElementsByTagName('head')[0].append(link)
        document.write(finelurl)
    }
}

function dynamicLoadCss(urllist) {
    for (let i = 0; i < urllist.length; i++) {
        let url = urllist[i];
        var head = document.getElementsByTagName('head')[0];
        var link = document.createElement('link');
        link.type = 'text/css';
        link.rel = 'stylesheet';
        link.href = url;
        head.appendChild(link);
    }
}

var s = document.currentScript.src;
var csspath = s.substr(0, s.lastIndexOf('/') - 0);
var csslist = ["https://at.alicdn.com/t/font_2213760_as9380qm7dw.css",csspath+"/xndatepicker.css"]
var jslist = [csspath + "/xntimepicker.js"]
dynamicLoadCss(csslist);
dynamicLoadJs(jslist);
(function (window, $) {
    var format={
        'week':'YYYY-MM-DD',
        'date':'YYYY-MM-DD',
        'daterange':'YYYY-MM-DD',
        'datetime':'YYYY-MM-DD HH:mm:ss',
        'datetimerange':'YYYY-MM-DD HH:mm:ss',
        'month':'YYYY-MM',
        'monthrange':'YYYY-MM',
        'year':'YYYY',
        'yearrange':'YYYY',
        'multiple':'YYYY-MM-DD'
    }
    var shortList={
        'multiple':[],
        'week':[
            {"name": "最近一周", "value": {startTime: moment().startOf('week'), endTime:moment().endOf('week')}},
            {"name": "本月第一周", "value": {startTime: moment().startOf('month').startOf('week'), endTime:moment().startOf('month').endOf('week')}},
            {"name": "本年第一周", "value": {startTime: moment().startOf('year').startOf('week'), endTime:moment().startOf('year').endOf('week')}},
        ],
        'date':[
            {"name": "今天", "value": {startTime: moment().startOf('day')}},
            {"name": "昨天", "value": {startTime: moment().subtract(1, 'days').startOf('day')}},
            {"name": "本周第一天", "value": {startTime: moment().startOf('week').startOf('day')}},
            {"name": "本月第一天", "value": {startTime: moment().startOf('month').startOf('day')}},
            {"name": "本年第一天", "value": {startTime: moment().startOf('year').startOf('day')}},
        ],
        'datetime':[
            {"name": "现在", "value": {startTime: moment()}},
            {"name": "今天", "value": {startTime: moment().startOf('day')}},
            {"name": "昨天", "value": {startTime: moment().subtract(1, 'days').startOf('day')}},
            {"name": "本周第一天", "value": {startTime: moment().startOf('week').startOf('day')}},
            {"name": "本月第一天", "value": {startTime: moment().startOf('month').startOf('day')}},
            {"name": "本年第一天", "value": {startTime: moment().startOf('year').startOf('day')}},
        ],
        'daterange':[
            {"name": "最近一天", "value": {startTime: moment().subtract(1, 'days'), endTime: moment()}},
            {"name": "最近三天", "value": {startTime: moment().subtract(3, 'days').startOf('day'), endTime: moment()}},
            {"name": "最近一周", "value": {startTime: moment().subtract(7, 'days').startOf('day'), endTime: moment()}},
            {"name": "最近一月", "value": {startTime: moment().subtract(1, 'months').startOf('day'), endTime: moment()}},
            {"name": "最近一年", "value": {startTime: moment().subtract(1, 'years').startOf('day'), endTime: moment()}},
            {"name": "本月", "value": {startTime: moment().startOf('month').startOf('day'), endTime: moment()}},
            {"name": "本年", "value": {startTime: moment().startOf('year').startOf('day'), endTime: moment()}},
        ],
        'datetimerange':[
            {"name": "今天", "value": {startTime: moment().startOf('day'), endTime: moment()}},
            {"name": "最近一天", "value": {startTime: moment().subtract(1, 'days'), endTime: moment()}},
            {"name": "最近三天", "value": {startTime: moment().subtract(3, 'days'), endTime: moment()}},
            {"name": "最近一周", "value": {startTime: moment().subtract(7, 'days'), endTime: moment()}},
            {"name": "最近一月", "value": {startTime: moment().subtract(1, 'months'), endTime: moment()}},
            {"name": "最近一年", "value": {startTime: moment().subtract(1, 'years'), endTime: moment()}},
            {"name": "本月", "value": {startTime: moment().startOf('month'), endTime: moment()}},
            {"name": "本年", "value": {startTime: moment().startOf('year'), endTime: moment()}},
        ],
        'month':[
            {"name": "本月", "value": {startTime: moment().startOf('month'), endTime: moment()}},
            {"name": "上月", "value": {startTime: moment().subtract(1, 'month').startOf('month'), endTime: moment()}},
            // {"name": "本年一月", "value": {startTime: moment().startOf(1, 'year').startOf('month'), endTime: moment()}},
        ],
        'monthrange':[
            {"name": "最近一月", "value": {startTime: moment().subtract(1, 'months').startOf('month'), endTime: moment()}},
            {"name": "最近两月", "value": {startTime: moment().subtract(2, 'months').startOf('month'), endTime: moment()}},
            {"name": "最近三月", "value": {startTime: moment().subtract(3, 'months').startOf('month'), endTime: moment()}},
            {"name": "最近一年", "value": {startTime: moment().subtract(1, 'years').startOf('month'), endTime: moment()}},
            {"name": "本年", "value": {startTime: moment().startOf('year').startOf('month'), endTime: moment()}},
        ],
        'year':[
            {"name": "本年", "value": {startTime: moment().startOf('year')}},
            {"name": "去年", "value": {startTime: moment().subtract(1, 'years').startOf('year')}},
            {"name": "三年前", "value": {startTime: moment().subtract(3, 'years').startOf('year')}},
            {"name": "五年前", "value": {startTime: moment().subtract(5, 'years').startOf('year')}},
        ],
        'yearrange':[
            {"name": "最近一年", "value": {startTime: moment().startOf('year'), endTime: moment()}},
            {"name": "最近两年", "value": {startTime: moment().subtract(2, 'years').startOf('year'), endTime: moment()}},
            {"name": "最近三年", "value": {startTime: moment().subtract(3, 'years').startOf('year'), endTime: moment()}},
            {"name": "最近五年", "value": {startTime: moment().subtract(5, 'years').startOf('year'), endTime: moment()}},
            {"name": "最近十年", "value": {startTime: moment().subtract(10, 'years').startOf('year'), endTime: moment()}},
        ]
    }
    var option = {
        showWeek: true,//是否显示周几
        placeholder:'请选择',
        shortList: [],
        locale:{
            month:[
                '一月',
                '二月',
                '三月',
                '四月',
                '五月',
                '六月',
                '七月',
                '八月',
                '九月',
                '十月',
                '十一月',
                '十二月',
            ],
            monthHead:[
                '1月',
                '2月',
                '3月',
                '4月',
                '5月',
                '6月',
                '7月',
                '8月',
                '9月',
                '10月',
                '11月',
                '12月',
            ],
            week:['日','一','二','三','四','五','六'],
            clear:'清空',
            confirm:'确定',
            yearHeadSuffix:'年'
        },//显示信息
        confirmFirst:true,//第一次就搜索
        separator:' 到 ',//双日历模式下的链接符
        showType:'modal',//显示样式
        linkPanels:false,//双日历面板联动
        showClear:true,//是否显示清除按钮
        autoConfirm:true,//单日历模式,和周日历模式,是否自动确定
        showShortKeys:true,//是否显示快捷选项
        autoFillDate:true,//自动变更element里面的值,如果自动变更,则按照插件样式显示
        firstDayOfWeek:7,//周起始日 1-7
        theme:'default',//主题
        multipleDates:[],//当为多选日期类型时的初始值
        startTime:'',//初始开始时间
        endTime:'',//初始结束时间
        minDate:'',//最小时间
        maxDate:'',//最大时间
    }

    function XNDatepicker(targetDom, options,onConfirm) {
        this.$targetDom = $(targetDom);
        this.option = $.extend(false, option, options);
        this.type = this.option.type;
        this.format = this.type.indexOf('year') > -1 ? 'YYYY' : (this.type.indexOf('month') > -1 ? 'YYYY-MM' : (this.type.indexOf('time') > -1 ? 'YYYY-MM-DD' : 'YYYY-MM-DD'));
        this.option.startTime=moment(this.option.startTime||moment());
        this.option.endTime=moment(this.option.endTime||moment());
        this.option.minDate && (this.option.minDate=moment(this.option.minDate));
        this.option.maxDate && (this.option.maxDate=moment(this.option.maxDate));
        this.onConfirm=onConfirm;
        this.selectedDate = {};//已确认的时间
        this.date1=this.option.startTime.clone();//当前选择的起始时间
        this.date2=this.option.endTime.clone();//当前选择的起始时间
        this.tempdate1;//左侧选择器的时间
        this.tempdate2;//右侧选择器的时间
        this.multipleDates=$.extend(true,[],this.option.multipleDates||[]);
        if(!options.shortList){
            this.option.shortList=shortList[this.type]
        }
        if(!options.format){
            this.option.format=format[this.type]
        }
        this.id = this.getRandomString();
        this.show = false;
        this.eventList = {};
        this.init();
        this.addPosEvent();
        this.addTargetEvent();
    }

    XNDatepicker.prototype = {
        init() {
            this.setCurrentTime({startTime: this.option.startTime, endTime: this.option.endTime})
            this.rendDatePicker();
            this.setPosition();
            this.addEvent();
            this.initCallback();
            this.initTimePicker();
            this.rendHoverStyle();
            this.setDate();
            this.confirm(false,true);
        },
        resetCurrentTime(startTime,endTime) {//显示日历的时候,重新设置当前的日期
            if(this.type=='multiple'){
                this.multipleDates=$.extend(true,[],this.selectedMultiple||[]);
            }
            if(!this.selectedDate[0]){
                this.selectedDate[0]=moment();
            }
            if(!this.selectedDate[1] && (this.type=='week' || this.type.indexOf('range')>-1)){
                this.selectedDate[1]=moment();
            }
            if(startTime){
                this.selectedDate[0]=moment(startTime);
            }
            if(endTime){
                this.selectedDate[1]=moment(endTime);
            }
            this.setCurrentTime({startTime: this.selectedDate[0], endTime: this.selectedDate[1]});
            this.setCurrentDay();
            this.updateCurrentTime(1);
            this.updateCurrentTime(2);
            this.setPosition();
        },
        getCurrentTargetTime() {
            var str = ''
            if (this.$targetDom[0].nodeName == 'INPUT') {
                str = this.$targetDom[0].value;
            } else {
                str = this.$targetDom[0].innerHTML;
            }
            // console.log(str)
        },
        updateCurrentTime(num) {
            if (this['timepicker' + num]) {
                var date = moment(this.selectedDate[num - 1]).format('YYYY-MM-DD HH:mm:ss');
                this['timepicker' + num].updateCurrentTime(date)
            }
        },
        initTimePicker() {
            var that = this;
            if (this.type == 'datetime' || this.type == 'datetimerange') {
                this.timepicker1 = new XNTimepicker(this.$container.find('.time1 .timecont'), {
                    time: that.selectedDate[0],
                    onConfirm(res) {
                        var currentTime = moment(that.selectedDate[0])
                        currentTime = currentTime.hours(res.value.hour);
                        currentTime = currentTime.minutes(res.value.minute);
                        currentTime = currentTime.seconds(res.value.second);
                        that.date1 = currentTime;
                        that.$container.find('.time1 .timecont>span').html(res.str)
                    }
                })
            }
            if (this.type == 'datetimerange') {
                this.timepicker2 = new XNTimepicker(this.$container.find('.time2 .timecont'), {
                    time: that.selectedDate[1],
                    onConfirm(res) {
                        var currentTime = moment(that.selectedDate[1])
                        currentTime = currentTime.hours(res.value.hour);
                        currentTime = currentTime.minutes(res.value.minute);
                        currentTime = currentTime.seconds(res.value.second);
                        that.date2 = currentTime;
                        that.$container.find('.time2 .timecont>span').html(res.str)
                    }
                })
            }
        },
        initCallback() {
            this.on('confirm', this.onConfirm);
        },
        addTargetEvent() {
            clickFunc=(e)=>{
                if (e.target == this.$targetDom[0]) {
                    this.changeShowStatus();
                } else if (!$(e.target).parents('.xndatepicker')[0] || ($(e.target).parents('.xndatepicker')[0].id != this.id)) {

                    this.changeShowStatus(true);
                }
            }
            this.removeClickEvent=()=>{
                document.removeEventListener('click', clickFunc, true)//捕获阶段
            }
            document.addEventListener('click', clickFunc, true)//捕获阶段
        },
        changeShowStatus(hide) {
            if (this.show || hide) {
                this.show = true;
                this.$container.slideUp(100);
            } else {
                this.$container.css({display:'block',opacity:'0'})
                this.resetCurrentTime();
                this.$container.animate({'opacity':1},200);
            }
            this.show = !this.show;
        },
        addPosEvent: function () {
            var that = this;
            window.addEventListener("scroll", function () {
                that.setPosition();
            })
            window.addEventListener("resize", function () {
                that.setPosition();
            })
        },
        setPosition: function () {
            if (!this.$container[0]) {
                return;
            }
            var wwidth = document.documentElement.clientWidth;
            var wheight = document.documentElement.clientHeight;
            var curcolordom = this.$targetDom[0]
            var top = targetTop = curcolordom.getBoundingClientRect().top;
            var left = targetLeft = curcolordom.getBoundingClientRect().left;

            var targetWidth = this.$targetDom.outerWidth();
            var targetHeight = this.$targetDom.outerHeight();

            var domwidth = this.$container.outerWidth();
            var domheight = this.$container.outerHeight();

            top=top+targetHeight+10;

            var trangletop=-6;
            var trangleleft=left+20;
            var borderWidth="1px 0 0 1px"

            if(top+domheight>wheight){
                top=targetTop-domheight-10;
                trangletop=domheight-7;
                borderWidth="0 1px 1px 0"
            }
            if(top<0){
                top=0;
            }
            if(left+domwidth>wwidth){
                left=targetLeft+targetWidth-domwidth;
                trangleleft=domwidth-60;
            }
            if(left<0){
                left=0
            }
            this.$container[0].style.top = top + "px";
            this.$container[0].style.left = left + "px";
            this.$container.find('.xntriangle')[0].style.left = trangleleft + "px";
            this.$container.find('.xntriangle')[0].style.top = trangletop + "px";
            this.$container.find('.xntriangle')[0].style.borderWidth = borderWidth;
        }
    }
    window.XNDatepicker = XNDatepicker;
})(window, jQuery)
  • 写回答

3条回答 默认 最新

  • 敬故 2022-01-07 11:39
    关注

    因为IE浏览器对代码的编程要求较高,所以要兼容IE浏览器尽量不要缩写,将函数定义补充完整,就不再报错了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月22日
  • 已采纳回答 9月14日
  • 修改了问题 1月7日
  • 创建了问题 1月7日

悬赏问题

  • ¥15 fluent的在模拟压强时使用希望得到一些建议
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流
  • ¥15 Rstudio 保存代码闪退