jeDate—选择日期后,再点开重新选择时间,日期会被置为今日日期

版权声明:本文为博主原创文章,非商业转载请附上地址与作者信息,谢谢! https://blog.csdn.net/jx950915/article/details/82108666

bug

因为项目中用到了jeDate时间组件,但是一直都只是简单引用了就没管了,最近测试提了一个小bug选择日期后,再点开重新选择时间,日期会被置为今日日期,后来我自己实践了一下发现不仅仅是选择时间会重现这个问题,只要是选择日期后,再点开然后啥都不干,点击确认日期就会被重置为今日日期。然后去官网看看是我的原因还是控件的原因。

查找原因

我去官网示例演示了一下我的操作,发现官网示例也是有这个问题,所以我就定位到了是控件的原因
bug

源码分析

既然定位了控件问题,然后再定位一下具体原因,我发现问题重现都是通过点击确认键重现的,然后我就到源码中查找点击事件:

分析

如上图所示,发现最后确认获取的值是通过that.selectValue来确定的。

接下来去初始化函数中找到这个that.selectValue初始化值了

初始化

然后发现getDateTime这个函数
getDateTime

通过分析发现如果传入值为空,则会以当前日期为初始值,并且分析发现函数传参形式为DD:7这种,意思为距离当前日期的天数。

修改

在通过上面一层一层的分析下来,我们发现我们可以通过设置getDateTime来初始化选择值

getCurrValue函数下修改

修改

var result = that.valCell.value;
result = result.substr(0,11);
var nowTime = [jet.parse(jet.getDateTime({}), parmat)];
nowTime = nowTime[0];
var time1 = new Date(result).setHours('0');
var time2 = new Date(nowTime).setHours('0');
var nDays = (parseInt((time1 - time2) / 1000 / 3600 / 24));
var redate = {
    DD: nDays
};
that.selectValue = [jet.parse(jet.getDateTime(redate), parmat)];

OJBK

这里写图片描述

猜你喜欢

转载自blog.csdn.net/jx950915/article/details/82108666