jQuery datepicker初始化自动弹出 未触发选择就显示如何解决
问题根因
- 核心问题是代码存在重复初始化datepicker的操作:你已经对
#datepicker2完成了一次带配置的初始化,后续额外调用的$("#datepicker2").datepicker()属于二次初始化,部分版本的jQuery datepicker在二次初始化后调用setDate方法,会意外触发日期选择器弹窗显示。 - 你之前尝试的先调用
show再调用hide的操作,会破坏组件内部的显示状态标记,导致后续点击输入框无法正常唤起弹窗。
修复方案
首先修改JS代码,删除重复初始化逻辑,两个datepicker实例统一做单次初始化,修正后完整代码如下:
$( function() { var days = ['Pazar','Pazartesi', 'Salı', 'Çarşamba', 'Perşembe', 'Cuma', 'Cumartesi']; // 初始化datepicker2 仅单次初始化 $('#datepicker2').datepicker({ dateFormat: 'dd M, yy', language: 'tr', onSelect: function () { var date = $(this).datepicker('getDate'); var day = date.getDay(); $( "#day2" ).html( days[day] ); } }).datepicker("setDate", new Date()); // 初始化另一个datepicker实例 $('#datepicker').datepicker({ dateFormat: 'dd M, yy', language: 'tr', onSelect: function () { var date = $(this).datepicker('getDate'); var day = date.getDay(); $( "#day" ).html( days[day] ); } }).datepicker("setDate", new Date()); // 页面加载初始赋值 var day = $('#datepicker2').datepicker('getDate').getDay(); $( "#day2" ).html( days[day] ); day = $('#datepicker').datepicker('getDate').getDay(); $( "#day" ).html( days[day] ); // 兜底:主动取消输入框焦点,避免自动触发弹窗 $('body').focus(); });
如果修改后仍存在首次加载弹窗问题,做以下检查:
- 检查两个input标签是否加了
autofocus属性,如果有直接删除即可,输入框自动获取焦点会触发datepicker显示。 - 可以在初始化datepicker前先销毁旧实例,避免之前错误操作残留的状态干扰,添加代码:
// 初始化前先销毁旧实例 $('#datepicker, #datepicker2').datepicker('destroy');
内容的提问来源于stack exchange,提问作者sad birdie
相关产品推荐
相关产品推荐

