You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 13:45:10