基于jscal2单日历与双日历控件的实现

本文介绍了一种双日历组件的实现过程,包括环境搭建、组件引入及使用方法。通过具体步骤展示了如何从单日历转换到双日历,并进行了必要的业务逻辑验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:zccst

由单日历改为双日历,整整花了1.5天的实现。这还不是自己实现,只是稍有改动而已。
先上一张截图:
[img]http://dl2.iteye.com/upload/attachment/0100/6095/f4e2a32b-58a2-3e37-a449-4eca69cc9992.jpg[/img]


一、环境准备
1,将xx.js文件放到dep下
dep/jscal/1.9/calendarLang.js
dep/jscal/1.9/jscal.js
dep/jscal/moment.min.js
dep/jscal/timeSelect.js


2,将xx.css文件放到asset/css下
asset/css/cmain.css
asset/css/jscal2.css


3,在seajsconfig.js里引入他们
'jscal': 'dep/jscal2/1.9/jscal.js',
'calendarLang': 'dep/jscal2/1.9/calendarLang.js',
'moment': 'dep/jscal2/moment.min.js',
'timeSelect': 'dep/jscal2/timeSelect.js',


4,在index.html里引入css文件
<link rel="stylesheet" type="text/css" href="asset/css/jscal2.css">
<link rel="stylesheet" type="text/css" href="asset/css/cmain.css">


5,将图片放到asset/images/下
注:没有再建目录


二、使用
1,引入组件
require('calendarLang');
var Backbone = require('backbone'),
jscal = require('jscal'),

注:此时要将jscal和calendarLang文件的第一行修改一下
define(function(require, exports, module){/*'jscal', */
define(function(require, exports, module){/*'calendarLang', */


2,在backbone的initialize方法里
var cal = Calendar.setup({
onSelect: function(cal) { cal.hide() },
showTime: true
});
cal.manageFields("t_test_btn", "t_test_input", "%Y-%m-%d %I:%M %p");


3,使用封装后的组件
(1)将该文件放到指定位置,并在seajsConfig.js中引用
"selectTrigger": "src/component/selectTrigger.js",

(2)继续增加cmain.css,并在index.html中引入


(3)在使用的文件中引入该文件
require('calendarLang');
jscal = require('jscal'),
SelectTrigger = require('selectTrigger'),
TimeSelect = require('timeSelect'),//其实


(4)代码
在html页面增加
<div id="time-select-container" style=" float: right; margin-right:2px; width: 230px;"></div>

在js文件增加
//引入单日历控件
/*
var cal = Calendar.setup({
onSelect: function(cal) { cal.hide() },
showTime: true
});
cal.manageFields("t_test_btn", "t_test_input", "%Y-%m-%d %H:%M:%S");*/


//引入双日历控件
var me = this;
var timeSelect = new TimeSelect({
onSelect: function(o){
timeSelect.errmsg('');

//做业务上的校验,比如有些表不允许查询今天的数据,则需要给予提示
//投放网络的domain级别的列表查询,不支持当日数据查询,且时间跨度不超过31天
//其他表时间跨度不超过366天
//不能选择未来的时间
if(!o.excludeTodayFuture()){
timeSelect.errmsg('请选择今天之前(不含今天)的时间范围');
return false;
}

if(o.dayDistance() > 365){
timeSelect.errmsg('时间跨度不能超过1年,请重新选择');
return false;
}

//console.log(o);
/*
if(o.dayDistance() > 31 ){
timeSelect.errmsg('时间跨度不能超过1个月,请重新选择');
return false;
}
if(o.isToday()){
alert('对不起,系统不支持查询当日数据');
return false;
}*/
//将数据设回可见区域
me.trigger.setText(o.getDisplayText());
me.currentTimeSelect = o;
//me.search();
return true;
}
});
var ts = timeSelect.getDefaultTimeSelect();
me.currentTimeSelect = ts;
this.trigger = new SelectTrigger('#time-select-container',timeSelect,{defaultText:ts.text});
this.trigger.reset();



(5)改造
增加错误提示函数
修复获取当前时间的bug
修改开始、结束时间展示(由span改为input)


如果您觉得本文的内容对您的学习有所帮助,您可以微信:
[img]http://dl2.iteye.com/upload/attachment/0109/0668/fb266dfa-95ca-3d09-b41e-5f04a19ba9a1.png[/img]
Js双日控件,在一个网页上同时显示两个日选择器,写成了封装类,方便使用者调用。同时美化的相当不错。   包括了以下函数:   1、2012——2020年节假日信息(包括节假日前1~3天/后1~3天)   2、格式化数字,不足两位前面补0   3、将日对象/日字会串格式化为指定日字符串   4、将日字符串格式化为数字   5、获取目标元素针对于文档的位置   6、元素选择器   7、查找元素位置   8、判断目标元素是否包含指定的className      关于一些日历调用的参数说明:Calendar({    id: "#J_date_1", //触发显示日历元素ID    isPopup: !0, //弹出式日历    isPrevBtn: !0, //显示上月按钮    isNextBtn: !0, //显示下月按钮    isCloseBtn: !0, //显示关闭按钮    isHoliday: !0, //节假日特殊显示    isHolidayTips: !0, //显示节假日1~3天/后1~3天信息    isDateInfo: !0, //显示日信息    isMessage: !0, //有日历提示信息    isCalStart: !0, //标记为开始时间    dateInfoClass: "date-info-start", //开始时间icon样式    range: {mindate: "2011-09-01", maxdate: "2020-12-31"},//限制范围(当天——2020-12-31)    count: 2, //日历个数    monthStep: 1, //切换上下月日历步长    onSelectDate: fnSelectDate, //选择日回调方法    onClose: fnClose //关闭日历回调方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值