动态删除 Datepicker 函数

Posted

技术标签:

【中文标题】动态删除 Datepicker 函数【英文标题】:Remove Datepicker Function dynamically 【发布时间】:2011-08-31 17:41:19 【问题描述】:

我想根据下拉列表选择的值删除日期选择器功能。我尝试了以下代码,但是当我将光标放在文本框中时它仍然显示日历。请给我一个建议。

$("#ddlSearchType").change(function () 
    if ($(this).val() == "Required Date" || $(this).val() == "Submitted Date") 
        $("#txtSearch").datepicker();
     else 
        $("#txtSearch").datepicker("option", "disabled", true);
    
);

【问题讨论】:

"Required Date" 和 "Submitted Date" 不是下拉列表的值,它们是标签。查找 ,您需要的值将在下拉列表的 value 属性中。 为什么不在文档就绪时加载它(日期选择器),而不是根据您的选择切换隐藏/显示? 我使用“Required Date”和“Submitted Date”作为值。是的,我可以稍后将它们更改为 0,1,2,3 值。感谢您的建议。 @c0mrade 是的,这是我能想到的最后一种方式。但我想知道是否有动态绑定和撤销 jquery 功能? 【参考方案1】:

您可以尝试启用/禁用方法,而不是使用选项方法:

$("#txtSearch").datepicker("enable");
$("#txtSearch").datepicker("disable");

这会禁用整个文本框。所以也许你可以改用datepicker.destroy()

$(document).ready(function() 
    $("#ddlSearchType").change(function() 
        if ($(this).val() == "Required Date" || $(this).val() == "Submitted Date") 
            $("#txtSearch").datepicker();
        
        else 
            $("#txtSearch").datepicker("destroy");
        
    ).change();
);

Demo here.

【讨论】:

【参考方案2】:

在您不想要的时候销毁 datepicker 的实例,并在必要时创建新的实例。

我知道这很丑,但只有这似乎有效......

Check this out

 $("#ddlSearchType").change(function () 
        if ($(this).val() == "Required Date" || $(this).val() == "Submitted Date") 
                $("#txtSearch").datepicker();

         
          else 
                $("#txtSearch").datepicker("destroy");                    
         
 );

【讨论】:

【参考方案3】:

只需将 datepicker 绑定到一个类,而不是将它绑定到 id 。当你想撤销日期选择器时删除类...

$("#ddlSearchType").change(function ()  
  if ($(this).val() == "Required Date" || $(this).val() == "Submitted Date")                    
    $("#txtSearch").addClass("mydate");
    $(".mydate").datepicker()
   else  
    $("#txtSearch").removeClass("mydate");
   
); 

【讨论】:

如果以前有效,那么现在无效【参考方案4】:

好吧,我遇到了同样的问题并尝试“破坏”,但这对我不起作用。然后我发现了以下工作 我的 html 是:

<input placeholder="Select Date" id="MyControlId" class="form-control datepicker" type="text" />

Jquery 对我有用:

$('#MyControlId').data('datepicker').remove();

【讨论】:

这对我有用,而不是其他答案,谢谢哥们。【参考方案5】:

用官方API怎么样?

根据 API 文档:

DESTROY:完全删除日期选择器功能。这会将元素返回到其初始化前的状态。

用途:

$("#txtSearch").datepicker("destroy");

将输入恢复到其正常行为并

$("#txtSearch").datepicker(/*options*/);

再次显示数据选择器。

【讨论】:

欢迎提供解决方案链接,但请确保您的答案在没有它的情况下有用:add context around the link 这样您的其他用户就会知道它是什么以及为什么会出现,然后引用最相关的您链接到的页面的一部分,以防目标页面不可用。 Answers that are little more than a link may be deleted.【参考方案6】:

这是我使用的解决方案。它有更多的行,但它只会创建一次日期选择器。

$('#txtSearch').datepicker(
    constrainInput:false,
    beforeShow: function()
        var t = $('#ddlSearchType').val();
        if( ['Required Date', 'Submitted Date'].indexOf(t) ) 
            $('#txtSearch').prop('readonly', false);
            return false;
        
        else $('#txtSearch').prop('readonly', true);
    
);

除非 ddlSearchType 的值为“Required Date”或“Submitted Date”,否则不会显示日期选择器

【讨论】:

以上是关于动态删除 Datepicker 函数的主要内容,如果未能解决你的问题,请参考以下文章

JQuery DatePicker 只读

Nativescript Datepicker 更改文本颜色

Django 表单 - django-bootstrap-datepicker-plus 未呈现 datepicker

在 DatePicker-swift 中限制小时和分钟?

在 Jquery Ui Datepicker 中禁用今天之后的未来日期

从 html5 datepicker 禁用某些日期