Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >利用jquery ui的datepicker开发一个课程日历

利用jquery ui的datepicker开发一个课程日历

作者头像
风柏杨4711
发布于 2021-03-15 02:47:16
发布于 2021-03-15 02:47:16
2.1K00
代码可运行
举报
文章被收录于专栏:技术小牛技术小牛
运行总次数:0
代码可运行

    这两天在开发某商学院的网站,里面有涉及到课程的模块,客户希望在网站的首页显示一个日历,在有课程的日期加上显眼的标识,使网站用户一眼看到日历后就能知道哪天商学院有课程以便他们安排时间报名修读。

    这个功能挺有意思的,符合本人及非常小器公司一直所坚持的“为客户创造价值”的理念,它真正从用户的角度思考问题了,客户真正需要的、实用的东西是我最喜欢开发的产品因为我觉得不能为客户创造价值的产品最终必定不能为自己创造价值,这个世界是讲因果的。

    刚开始的时候感觉用第三方的东西挺麻烦的,一来要研究别人的接口,规范等一大堆的东西,有什么地方满足不了要求的时候就更加麻烦了,要去读懂别人的源码再修改,还不如自己全新开发来得直接简单,但日历这东西,说复杂不复杂,但要做得好也有一定工作量,利用google快速了解了目前几个比较知名的轻量级日历插件的接口、提供的配置项及功能情况后,决定不重复制造轮子,在jquery ui的datepicker控件上进行开发,因为它虽然功能简单,但提供的配置项比较灵活,不需要经过大调整就能实现想要的效果,而且自备多种UI风格,相信总有一款能很好地与网站风格相融合,呵呵。废话不多说了,下面来看看实现的过程吧,希望能被有需要的朋友借鉴,同时欢迎各位大神提出宝贵建议。首先看看效果:图中2013年4月30号被一个红色的圈圈住了,这是一个设计时的一个约定,日期被圈住说明当天是有课程的,点击这个日期的时候再列出这天有哪些课程。

,UI的风格其实就是jquery ui中的蓝色主题版本的,由于本身网站是以蓝色作为基调的,所以用蓝色主题的UI能与网站整体融合得非常好,可能很多人印象中都觉得datepicker是用来选日期的,以前应用它的时候都是有一个输入框,点击输入框后才弹出这个日历面板,选择一个日期后触发回调,把选中的日期更新回到一个特定的元素当中,日期选择控件的使命就完成了,但这里,它做的却是完全不同的事情。它就像台历一样,只负责显示日期列表及标记一些特定日子的作用,当然,它比台历更加复杂和先进一点,因为它是根据后台的课程开课日期设置来自动在日历中做标记的。

    实现的细节:

    1)怎样让datepicker默认就显示在指定的地方而不是通过输入框焦点触发? 这点其实很简单,通过查datepicker的api就可以知道datepicker初始化的时候会自动判断调用它的元素类型是什么,如果是input,它就会等待点击触发,如果是div,它默认就会显示出来了,所以,这里,只需要在要显示的位置放一个div,然后用jquery的选择器找到这个元素,并且在上面调用datepicker()方法就可以了,示例:$('.datePickerWraper').datepicker();

    2)怎样让datepicker符合设计的要求?这个其实也简单,用CSS配合一下了,我的建议是不要直接在jquery ui的样式上面改,一来影响它自身的完整及独立性,到时或许会用到它的控件,如果直接改会导致一些意想不到的情况发生,我认为比较好的办法是在特定的页面下用自己的样式把默认的样式覆盖掉以使控件的尺寸符合我们的预期,即方便又灵活。

    3)怎样在特定的日期加上特殊的标记?这个是课程日历的关键所在。首先,当然是需要课程开课日期的数据了,由服务端提供的课程信息数组而来,这里就不再赘述了,研究了datepicker的api,发现它提供了一个beforeShowDay的钩子,所有的日期在渲染之前都会通过这里的,有这个机制就好办了,在这个钩子里添加代码,遍历课程列表,如果当前单元格的日期与课程的开课日期是同一天,就返回一个带有三个元素的数组变量,分别代表日期是否可选,要在日期容器里额外添加的class属性及单元格的hover事件触发时显示的内容,相当于a的title。由于每次渲染日期时都会经过这个方法处理,所以,只要把课程列表初始化好,在用户切换月份和年份的时候都会自动处理,不需要再在切换年月份的时候做干预,非常简便就能达到想要的效果了。

    4)怎样实现没有课程的日期不可点击(选择),有课程的日期点击(选择)后显示这天的课程列表?第三点中提到,beforeShowDay接收的返回参数中,第一个参数就是是否可以选择的标记,所以,只有在比较到有开课的日期才返回true,否则返回false就能达到控制日期是否可选的效果了,但是需要注意的一点是,默认的样式中,不可选的日期的opacity(不透明度)是1来的,也就是,基本上处于蒙住的状态了,看起来很不和谐,所以我通过CSS把它的默认样式修改了,而在返回false的日期中,jquery ui自动是把它的日期文本由a标签改成 span标签括住的,所以不用担心点击锚点会引起错误的问题。选中有课程的日期时,会触发控件的onSelect事件,弹出课程列表的操作写在onSelect事件的响应方法里面就可以了。下面是初始化控件的完整代码,仅供参考。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
		var curYear = new Date().getFullYear();
		$('.calendar').datepicker({
				yearRange: curYear+':'+curYear,
				prevText: '前一月',
				nextText: '后一月',
				yearSuffix: '年',
				dateFormat: "yy-mm-dd",
				showMonthAfterYear: true,
				dayNamesMin: ['日','一','二','三','四','五','六'],
				monthNames: ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月'],
				onSelect: function(text, instance){
					var arr = text.split('-');
					var year = arr[0], month = arr[1], day = arr[2];
					var curDateTime = new Date(year, month-1, day, 8, 0, 0);
					var dialogTitle = '商学院于'+text+'的课程安排';
					var curDateCourseList = [];
					var dialogHeight = 40;
					for(var i in courseList){
						var time = courseList[i].begin_date * 1000;
						if(time == curDateTime.getTime()){
							curDateCourseList.push("<a title='点击查看详情' href='/course/index.php?id="+courseList[i].id+"' target='_blank'>"+courseList[i].name+"</a>  <span style='color:#888;'>地点:"+ courseList[i].address +"</span><br>");
							dialogHeight += 35;
						}
					}
					$(".dateCourseList").html(curDateCourseList.join(',')).dialog({title:dialogTitle, height:dialogHeight});
					$(".dateCourseList").dialog("open");
					return false;
				},
				beforeShowDay: function(date){
					for(var i in courseList){
						var courseTime = (courseList[i].begin_date - 60 * 60 * 8)*1000;
						if(courseTime == date.getTime()){
							return [true, 'hasCourse', '课程日'];
							break;
						}
					}
					return [false, 'noCourse', '没有课程'];
				}
		});

demo就不设独立的网址了,有兴趣看看效果的朋友可以直接访问http://center.royalfield.org看课程日历就清楚了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2013/04/12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
jquery日历控件 假日
在Web开发中,日历控件是一个常见的组件,用于显示日期并帮助用户选择日期。jQuery日历控件是一款流行的JavaScript库,可以轻松地实现日历功能。在很多应用场景中,我们需要在日历上标识出假日,以提醒用户。本文将介绍如何结合jQuery日历控件和假日数据,实现假日在日历上的显示。
大盘鸡拌面
2024/04/29
3350
jQuery UI Datepicker使用介绍
本博客使用Markdown编辑器编写 在企业级web开发过程中,日历控件和图表控件是使用最多的2中第三方组件。jQuery UI带的Datepicker,日历控件能满足大多数场景开发需要。本文就主要讨论jQuery UI Datepicker的使用,和中文本地化配置。 1.jQuery UI介绍 jQuery UI是一套基于jQuery控件和动画效果Javascript类库。可以用来构建交互式的互联网应用程序。最新版本1.10.4.基于jQuery 1.6+ jQuery UI官方网站 2.jQuery
八哥
2018/01/18
2K0
jQuery UI Datepicker使用介绍
datepicker 日期连续选择(需要改源码)
先上效果: 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml
deepcc
2018/05/16
1.7K0
9 款样式华丽的 jQuery 日期选择和日历控件
现在的网页应用越来越丰富,我们在网页中填写日期和时间已经再也不用手动输入了,而是使用各种各样的日期时间选择控件,大部分样式华丽的日期选择和日历控件都是基于jQuery和HTML5的,比如今天要分享的这9款日期选择控件,漂亮的UI外观加上人性化的操作设计,大大提高了用户体验,让我们一起来欣赏一下吧。
哲洛不闹
2018/09/18
24.2K0
9 款样式华丽的 jQuery 日期选择和日历控件
EasyNVR RTSP转RTMP-HLS流媒体服务器前端构建之:bootstrap-datepicker日历插件的实时动态展现
需要注意的是, beforeShowDay()是处理在插件加载出来之前对日历插件所做的一些样式或其他方面的更改。当我们想要看到日历展示出对应日期得信息的时候,必须在日历加载出来以前对他进行操作。由于获取日历上展示的信息都是实时的通过请求接口获得的,因此,我们需要在通过Ajax请求接口的过程中就要使用同步请求,只有我们实时获得到的数据才有必要在日历上相应的显示出来。
EasyNVR
2020/04/23
1.5K0
EasyNVR RTSP转RTMP-HLS流媒体服务器前端构建之:bootstrap-datepicker日历插件的实时动态展现
日期输入框日历控件
前面介绍了jQueryUI的autocomplete ( )对象和effect对象,这篇文章来介绍jQuery的datepicker ( )对象,他的实现效果是当你点击input输入框时,会自动弹出日历控件,选择好日期后会自动填充到输入框中。它的常用参数:appendText:输入框后附加的文字;buttonImage:输入框后的小图片;dateFormat:选中的日期格式;showAnim:显示或隐藏控件时的动画效果;dayNamesMin:控件面板上的表头;changeMonth、 changeYear:是否可以修改月、年;minDate、 maxDate:日历可选择的范围
OECOM
2020/07/01
3.6K0
jQuery 插件 的this 指向问题(实战)
资源直接搜索 daterangepicker 即可,当然好看的样式可以基于Bootstrap。
用户7293182
2022/01/17
1.2K0
jQuery 插件 的this 指向问题(实战)
yii时间控件的使用
我们的表单中经常需要用户输入时间,yii中有很方便的时间控件CJuiDatePicker可供使用,得到的效果如下:
跑马溜溜的球
2020/12/07
1.2K0
yii时间控件的使用
5-15 bootcss 之 modal 以及 jquery ui 之datepicker 小记
  最近公司在用bootstrap和Jquery UI做项目,类似与OA的东西前两天碰到点问题,记录一下。希望读者不要在遇到和我一样的问题。
_淡定_
2018/08/24
9320
《最新出炉》系列初窥篇-Python+Playwright自动化测试-30-处理日历时间控件-下篇
理想很丰满现实很骨感,在应用playwright实现web自动化时,经常会遇到处理日期控件点击问题,手工很简单,可以一个个点击日期控件选择需要的日期,但自动化执行过程中,完全复制手工这样的操作就有点难了或者是有些复杂啰嗦而且麻烦不过相对于selenium来说,playwright已经很好了。宏哥上一篇已经讲解了如何处理日历时间控件,但是有些网站不知道出于什么原因,对于第一种方法可能会遇到输入框是readonly的情况,禁止输入文本。那么第一种方法就不适用了,但是只要我们换个思路然后稍微的变通地处理一下,就又可以使用了。
北京-宏哥
2023/11/10
3530
FullCalendar 日历插件中文说明文档
FullCalendar提供了丰富的属性设置和方法调用,开发者可以根据FullCalendar提供的API快速完成一个日历日程的开发,本文将FullCalendar的常用属性和方法、回调函数等整理成中文文档,以供参阅 普通显示设置 属性 描述 默认值 header 设置日历头部信息。 如果设置为false,则不显示头部信息。包括left,center,right左中右三个位置,每个位置都可以对应以下不同的配置: title: 显示当前月份/周/日信息 prev: 用于切换到上一月/周/日视图的按钮
用户1149182
2018/01/12
33.3K1
WEB入门之十九 UI
jQuery本身注重于​​后台​​,没有漂亮的界面,而jQuery UI的出现则补充了前者的不足,它提供了诸多的组件和华丽的界面,使用方便、灵活。
张哥编程
2024/12/17
3050
基于jQuery 常用WEB控件收集
基于Jquery开发的Autocomplete插件。具有易于使用,配置简单,既可以利用Ajax读取数据也可以直接从本地获取数据。
全栈程序员站长
2022/07/05
7.8K0
vue 手写一个时间选择器
最近研究了 DatePicker 的实现原理后做了一个 vue 的 DatePicker 组件,今天带大家一步一步实现 DatePicker 的 vue 组件。
小皮咖
2019/11/05
2.5K0
jQuery日历价格、库存设置Web组件2,前后台适用,可自定义字段及颜色风格
该文章是一个关于使用 jQuery 插件在网页上实现日历价格、库存、日期选择器,以及提供了相关配置参数和样式的说明。同时,它还提供了一个基于该插件的示例页面,以展示如何使用该插件进行日期选择、价格、库存等信息的展示和修改。该插件基于 jQuery 和 CSS 样式,使用简单,易于集成,并且具有高度可定制化的参数,可以满足各种不同的需求。该插件在社区中受到了广泛的欢迎和应用。
IMWeb前端团队
2018/01/08
3K0
jQuery日历价格、库存设置Web组件2,前后台适用,可自定义字段及颜色风格
《手把手教你》系列技巧篇(三十八)-java+ selenium自动化测试-日历时间控件-下篇(详解教程)
  理想很丰满现实很骨感,在应用selenium实现web自动化时,经常会遇到处理日期控件点击问题,手工很简单,可以一个个点击日期控件选择需要的日期,但自动化执行过程中,完全复制手工这样的操作就有点难了。宏哥上一篇已经讲解了如何处理日历时间控件,但是对于第一种方法可能会遇到输入框是readonly的情况,那么第一种方法就不适用了,但是只要我们稍微的变通地处理一下,就又可以使用了。
北京-宏哥
2021/11/10
1.6K0
FullCalendar日历插件
FullCalendar是一个jQuery日历插件,它使用Ajax来获取每一个月的日历事件并能够配置成使用自己的日历事件来源比如从GoogleCalendar获取事件。支持拖放日历中的事件,自定义点击和拖放事件。在很多项目中都会用到这个控件。
一觉睡到小时候
2019/07/02
5.4K0
FullCalendar日历插件
datepicker小插件(日期时间 & 日期 & 月份)
一个简单的日期时间选择小插件,引用 jquery.js  & bootstrap.css (需要图标文件) 如果路过的 朋友只是为了 找一个 可以直接引入 项目的时间控件,那么我推荐 Date Range Picker A JavaScript component for choosing date ranges.  Designed to work with the Bootstrap CSS framework. 官方网址 : http://www.daterangepicker.com/ 在这里你可
lonelydawn
2018/02/09
8.4K0
datepicker小插件(日期时间 & 日期 & 月份)
[先行者周末课程] 日历组件的开发思路讲解&&日历组件在实际工作中的使用方式
各位同学们大家好,今天又到了周日,视频课程的时候。上次咱们讲的是日历组件。 简短的回顾一下上周的内容,免得同学们一时断篇,想不起来身在何方。日历这种东西,初学者,包括我在内,多数都会有些不知从哪里下手。会有些不太理解这东西是怎么把每个月的格,都画出来的。 其实,单纯的日历,非常简单。本质就是Date()对象的应用。 日历是几行七列的表格,那么肯定是for...for循环嵌套的了。如果哪个同学不熟悉嵌套for循环,那肯定是没写过99乘法表。 ============ 今天这次课就是详细的给大家讲一个日历的内部
web前端教室
2018/02/06
2.8K0
[先行者周末课程] 日历组件的开发思路讲解&&日历组件在实际工作中的使用方式
前端架构师之01_JQuery
常见的JavaScript类库:jQuery、Prototype、ExtJS、Mootools和YUI等。
张哥编程
2024/12/13
3480
推荐阅读
相关推荐
jquery日历控件 假日
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档