news 2026/10/15 16:56:35

jQuery Date Range Picker酒店预订实战:日期范围选择与已售罄日期禁用方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
jQuery Date Range Picker酒店预订实战:日期范围选择与已售罄日期禁用方案
  • 前端
  • UI库/组件

【免费下载链接】jquery-date-range-picker

A jQuery plugin that allows user to select a date range

项目地址:https://gitcode.com/gh_mirrors/jq/jquery-date-range-picker
点击查看免费下载

jQuery Date Range Picker 是一个轻量好用的 jQuery 日期范围选择插件,专为酒店预订、机票筛选等场景设计。本文将带你用 3 步完成入住/退房日期选择器搭建,并通过 beforeShowDay 回调把已售罄日期一键禁用。

一、jQuery Date Range Picker 是什么?

jQuery Date Range Picker(当前版本 0.21.1)是一个完全由 CSS 定制样式的日期范围选择器插件,开箱即用的核心能力包括:

能力说明
🔁 双月日历左右两月并排展示,选中区间自动高亮
🌍 多语言支持内置简体中文、英文等 20+ 语言包
🎯 区间约束通过 minDays / maxDays 限制最短/最长入住天数
🚫 日期禁用beforeShowDay 回调可禁用任意日期并显示提示
⚡ 零依赖框架仅依赖 jQuery 1.7+ 与 Moment 2.8.1+

核心逻辑全部集中在 src/jquery.daterangepicker.js,样式位于 src/daterangepicker.scss。

二、30 秒上手:引入依赖与初始化

只需引入三个文件:jQuery、Moment 和插件本体,然后对任意<input>调用dateRangePicker()即可:

$('#checkin').dateRangePicker();

就这么简单——不传任何参数时,插件会以今天为起点、默认格式渲染一个双月日历。官方演示页 index.html 中列出了 50 多个可复制的配置示例。

三、酒店预订实战:锁定今天往后可选

酒店场景有三个硬性要求:入住日期不能早于今天、必须先选入住再选退房、入住天数有上下限。jQuery Date Range Picker 用 4 个参数即可全部满足:

$('#hotel-booking').dateRangePicker({ startDate: new Date(), // 可选范围从今天开始 selectForward: true, // 只能向后选择 minDays: 1, // 最短住 1 晚 maxDays: 30 // 最长住 30 晚 });
  • startDate之后的日期才会渲染为可选状态(实现见 src/jquery.daterangepicker.js#L1649);
  • selectForward: true会让第二个月的日历自动跟随所选日期,避免用户往前翻;
  • 超出maxDays的范围会被拦截,并在顶部显示"所选日期范围不能大于 30 天"的中文提示(CHANGELOG 中的多语言包均内置该文案)。

四、核心技巧:用 beforeShowDay 禁用已售罄日期

这是酒店场景最关键的配置。beforeShowDay会在日历渲染每一天之前被调用一次,接收一个 Date 对象,返回一个三元素数组:

beforeShowDay: function(t) { var soldOut = soldDates.includes(t.toDateString()); return [!soldOut, '', soldOut ? '已售罄' : '']; }
返回值含义
[0]true/false,该日期是否可选
[1]附加到日期格子的 CSS 类名,可用于标红等自定义样式
[2]鼠标悬停时显示的 tooltip 提示文本

官方示例把"周末无房"作为演示(demo.js#L459-L470):

$('#hotel-booking').dateRangePicker({ startDate: new Date(), selectForward: true, beforeShowDay: function(t) { var valid = !(t.getDay() == 0 || t.getDay() == 6); var _tooltip = valid ? '' : 'sold out'; return [valid, '', _tooltip]; } });

实际项目中,只需把valid的判断换成查询后端"无房日期列表"即可,禁用逻辑完全不变。

💡 进阶:配合showDateFilter还能在每天格子里显示当日房价,让日历直接变成"日历价表",示例见 demo.js#L403-L412。

五、两个让体验更好的可选配置

1. 选中后自动关闭

移动端用户最怕"选完不关",加一个autoClose: true即可:

{ autoClose: true }

2. 监听选择完成事件

用户选定日期范围后,datepicker-change事件会带上date1、date2两个 Date 对象,正是调用后端查询空房/价格的时机:

.on('datepicker-change', function(event, obj) { console.log(obj.date1, obj.date2); // 发送请求查房 });

事件清单与 demo.js#L52-L98 一致:datepicker-first-date-selected、datepicker-change、datepicker-apply、datepicker-close等。

六、常见配置速查表

参数类型酒店场景用途
startDateDate/String限制最早入住日期
endDateDate/String限制最晚可入住日期
selectForwardBoolean强制先选入住、再选退房
minDays/maxDaysNumber最短/最长入住晚数
beforeShowDayFunction禁用售罄日期 + tooltip
autoCloseBoolean选完自动收起面板
singleDateBoolean只选单一天(如"离店日期")
inline/alwaysOpenBoolean内嵌在页面侧边栏常显
languageString传'cn'启用简体中文界面

七、项目文件导航

想深入阅读源码或扩展功能,可以从以下文件入手:

  • 插件核心逻辑:src/jquery.daterangepicker.js
  • 完整配置演示(含酒店示例):demo.js
  • 演示页面 + 配置文档说明:index.html
  • 样式定制入口:src/daterangepicker.scss
  • 依赖与版本信息:package.json

总结

jQuery Date Range Picker 用不到 20 行配置就能覆盖酒店预订的完整需求:startDate+selectForward锁定可选范围,minDays/maxDays约束入住晚数,beforeShowDay精准禁用售罄日期并给出"已售罄"提示。对于还在用 jQuery 的存量项目,它无疑是实现日期范围选择的最低成本方案。

  • 前端
  • UI库/组件

【免费下载链接】jquery-date-range-picker

A jQuery plugin that allows user to select a date range

项目地址:https://gitcode.com/gh_mirrors/jq/jquery-date-range-picker
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/15 16:54:53

嵌入式硬件抽象层HAL设计与落地:接口稳定,换主控少熬夜

做嵌入式这行久了&#xff0c;你会发现一个规律&#xff1a;凡是产品生命周期超过一年的&#xff0c;代码结构比跑通一个demo重要得多。硬件抽象层(HAL)这个词&#xff0c;在很多新人耳朵里听起来像个名词堆砌&#xff0c;说白了它就是一套“让上层代码不直接碰硬件”的适配层。…

作者头像 李华
网站建设 2026/10/15 16:53:15

Unity桌面精灵实现:透明窗体、Win32穿透与跳动动画全解析

简介&#xff1a;面向希望复刻QQ宠物式桌面互动精灵的Unity开发者&#xff0c;这套完整工程包演示了从窗口模式设置、透明材质渲染、UI搭建到动画控制与用户交互的整套实现路径。压缩包共1267个文件&#xff0c;除大量bin编译资源外&#xff0c;还包含fbx模型、anim动画、mat材…

作者头像 李华
网站建设 2026/10/15 16:51:46

流程控制语句深度解析:分支、循环与跳转的选型和易错点

这周的学习计划排得比较满&#xff0c;今天轮到流程控制语句。说实话&#xff0c;刚开始翻教材的时候觉得这块内容自己早就"会了"——无非就是 if 判断一下、for 循环几圈的事。但真正静下心来把分支、循环、跳转语句逐个过了一遍之后&#xff0c;我发现以前写代码时…

作者头像 李华
网站建设 2026/10/15 16:51:32

轻量级C++ JSON解析器TinyJson:设计原理与实战指南

1. 为什么你会需要一个轻量级的JSON解析器1.1 从C的选型困境说起提到C里解析JSON&#xff0c;很多人第一反应是去找那些功能全面的大库&#xff0c;它们确实好用&#xff0c;接口丰富、文档详尽、社区活跃。但如果你真的在资源受限环境里做过开发&#xff0c;比如MCU上的配置解…

作者头像 李华