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

WordPress站点jQuery UI Datepicker重复显示问题解决问询

解决WordPress中jQuery UI Datepicker与原生日期选择器冲突问题

我正在开发一个WordPress网站,在特定页面通过PHP实现了自定义输入元素,并为该字段使用jQuery UI的datepicker组件,代码如下:

(function($){
    $(function() {
        jQuery.browser = {};
        (function () {
            jQuery.browser.msie = false;
            jQuery.browser.version = 0;
            if (navigator.userAgent.match(/MSIE ([0-9]+)\./)) {
                jQuery.browser.msie = true;
                jQuery.browser.version = RegExp.$1;
            }
        })();
        
        // Commented out the line below because it caused an error
        // document.getElementById('ordine-datepicker').valueAsDate = new Date('dd-MM-yyyy');
        
        console.log("ciao");

        // Using jQuery UI datepicker with date format option
        $('#ordine-datepicker').datepicker({
            dateFormat: 'mm/dd/yy', // Set the date format here
            onSelect: function (dateText) {
                // Convert the selected date to 'yyyy-MM-dd' format
                var selectedDate = $.datepicker.formatDate('yy-mm-dd', $.datepicker.parseDate('mm/dd/yy', dateText));
                
                $.ajax({
                    type: "POST",
                    url: admin_ajax_path,
                    data: {
                        'giorno' : selectedDate,
                        'action': 'get_ordini_function'
                    },
                    dataType: "json",
                    success: function (response) {
                        var questions_array = get_questions_from_survey(response);
                        render_questions_selector(questions_array, $);
                    },
                    error: function (errormessage) {
                        console.log(errormessage);
                    }
                });
            }
        });
    });
})(jQuery);

目前遇到两个问题:

  • 导入jQuery UI库后,页面会显示两个日期选择器:一个浏览器原生的,一个自定义样式的;但移除库导入后,自定义样式的日期选择器无法正常显示。
  • 自定义样式的日期选择器并非由我或当前主题开发,无法对其进行修改。

解决方法:仅保留自定义样式日期选择器

问题根源是输入元素大概率被设置为type="date",浏览器会自动渲染原生日期选择器,同时jQuery UI又附加了自定义组件,导致双重显示。以下是几种可行的解决方式:

方法1:修改输入元素的type属性

如果能控制PHP生成的输入元素代码,直接将type="date"改为type="text",浏览器就不会触发原生日期选择器,只保留jQuery UI的自定义版本。

方法2:通过JS强制转换输入类型(无法修改HTML时使用)

如果输入元素由第三方代码生成,无法直接修改HTML,可以在初始化datepicker前添加代码,强制将输入类型转为text:

(function($){
    $(function() {
        // 先转换输入类型,禁用原生选择器
        $('#ordine-datepicker').attr('type', 'text');

        // 原代码内容保持不变
        jQuery.browser = {};
        (function () {
            jQuery.browser.msie = false;
            jQuery.browser.version = 0;
            if (navigator.userAgent.match(/MSIE ([0-9]+)\./)) {
                jQuery.browser.msie = true;
                jQuery.browser.version = RegExp.$1;
            }
        })();
        
        console.log("ciao");

        $('#ordine-datepicker').datepicker({
            dateFormat: 'mm/dd/yy',
            onSelect: function (dateText) {
                var selectedDate = $.datepicker.formatDate('yy-mm-dd', $.datepicker.parseDate('mm/dd/yy', dateText));
                
                $.ajax({
                    type: "POST",
                    url: admin_ajax_path,
                    data: {
                        'giorno' : selectedDate,
                        'action': 'get_ordini_function'
                    },
                    dataType: "json",
                    success: function (response) {
                        var questions_array = get_questions_from_survey(response);
                        render_questions_selector(questions_array, $);
                    },
                    error: function (errormessage) {
                        console.log(errormessage);
                    }
                });
            }
        });
    });
})(jQuery);

方法3:通过CSS隐藏原生日期选择器控件

如果上述方法都不生效,可以用CSS针对不同浏览器隐藏原生控件:

/* 隐藏Chrome/Edge的原生日期选择器按钮 */
#ordine-datepicker::-webkit-calendar-picker-indicator {
    display: none;
}
/* 隐藏Firefox的原生日期选择器 */
#ordine-datepicker[type="date"] {
    -moz-appearance: textfield;
}
/* 隐藏IE的原生控件 */
#ordine-datepicker::-ms-clear, #ordine-datepicker::-ms-reveal {
    display: none;
}

将这段CSS添加到主题自定义CSS区域或页面的<style>标签中即可。


内容的提问来源于stack exchange,提问作者liz14

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 07:57:05