jQuery Datepicker特定日期禁用功能在GoDaddy Windows主机失效求助
解决jQuery Datepicker部署到GoDaddy Windows主机后禁用日期失效的问题
兄弟,我之前也踩过类似的Windows主机部署坑,你的问题核心大概率是日期字符串格式不匹配导致的!
问题分析
你本地运行正常,但上线后失效,关键出在这两点:
- 代码里用
jQuery.datepicker.formatDate('mm/dd/yy', date)生成的是带前导零的日期(比如01/07/2018) - 但你的
disableddates数组里的日期是不带前导零的格式(比如1/7/2018)
这俩字符串完全不一样,indexOf自然找不到匹配项,所以禁用逻辑就失效了。至于本地为啥正常?估计是你本地环境里result数组的日期格式刚好和格式化后的一致,或者本地的Datepicker区域设置默认生成不带前导零的格式,刚好凑上了。
两种解决方案
方案1:统一格式化规则为不带前导零
直接把formatDate的格式改成'm/d/yy'(小写m和d代表可选前导零),让生成的字符串和disableddates格式完全匹配:
var disableddates = result; //result是日期数组 ["1/7/2018","1/8/2018","1/9/2018"] $("#txtFromdate").datepicker({ minDate: 0, beforeShowDay : DisableSpecificDates }); $("#txtTodate").datepicker({ minDate: 0, beforeShowDay : DisableSpecificDates }); function DisableSpecificDates(date) { // 改成m/d/yy,生成和disableddates一致的格式 var string = jQuery.datepicker.formatDate('m/d/yy', date); console.log(string); // 现在会输出1/7/2018这类不带前导零的格式 return [disableddates.indexOf(string) == -1]; }
方案2:把禁用日期数组转成带前导零的格式
如果不想改Datepicker的格式化规则,可以提前处理disableddates数组,把所有日期转成带前导零的mm/dd/yy格式:
// 先统一禁用日期的格式为带前导零的mm/dd/yy var formattedDisabledDates = result.map(function(dateStr) { var [month, day, year] = dateStr.split('/'); // 给月份和日期补前导零 var paddedMonth = month.padStart(2, '0'); var paddedDay = day.padStart(2, '0'); return `${paddedMonth}/${paddedDay}/${year}`; }); $("#txtFromdate").datepicker({ minDate: 0, beforeShowDay : DisableSpecificDates }); $("#txtTodate").datepicker({ minDate: 0, beforeShowDay : DisableSpecificDates }); function DisableSpecificDates(date) { var string = jQuery.datepicker.formatDate('mm/dd/yy', date); console.log(string); // 用处理后的数组做匹配 return [formattedDisabledDates.indexOf(string) == -1]; }
验证建议
上线前可以在GoDaddy主机的页面打开浏览器控制台,看看console.log(string)输出的格式和disableddates里的元素是不是真的不一样,这样就能100%确认问题根源啦。
内容的提问来源于stack exchange,提问作者Dharmesh Mistry
相关产品推荐
相关产品推荐

