Удалить функцию Datepicker динамически - PullRequest
34 голосов
/ 24 мая 2011

Я хочу удалить функцию выбора даты в зависимости от выбранного значения в раскрывающемся списке.Я пытаюсь следующие коды, но он все еще показывает календарь, когда я помещаю курсор в текстовое поле.Пожалуйста, дайте мне предложение.

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

enter image description here

Ответы [ 6 ]

80 голосов
/ 24 мая 2011

Вы можете попробовать методы включения / выключения вместо использования метода option:

$("#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();
});

Демо здесь .

22 голосов
/ 24 мая 2011

Уничтожить экземпляр средства выбора даты, когда он вам не нужен, и создавать новый экземпляр, когда это необходимо.

Я знаю, что это ужасно, но только это, кажется, работает ...

Проверьте это

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

         }
          else {
                $("#txtSearch").datepicker("destroy");                    
         }
 });
6 голосов
/ 24 мая 2011

Просто привяжите указатель даты к классу, а не привязывайте его к идентификатору.Удалите класс, если вы хотите отозвать средство выбора даты ...

$("#ddlSearchType").change(function () { 
  if ($(this).val() == "Required Date" || $(this).val() == "Submitted Date")                   { 
    $("#txtSearch").addClass("mydate");
    $(".mydate").datepicker()
  } else { 
    $("#txtSearch").removeClass("mydate");
  } 
}); 
2 голосов
/ 14 декабря 2017

Ну, у меня была та же проблема, и я пытался "уничтожить", но у меня это не сработало.Затем я нашел следующую работу вокруг моего HTML был:

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

Jquery Это работает для меня:

$('#MyControlId').data('datepicker').remove();
0 голосов
/ 15 марта 2018

как насчет использования официального API ?

Согласно API doc:

DESTROY: полностью удаляет функцию выбора даты. Это вернет элемент в его состояние перед инициализацией.

Использование:

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

для восстановления нормального поведения ввода и

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

снова, чтобы снова показать сборщик данных.

0 голосов
/ 22 августа 2017

Это решение, которое я использую.У него есть больше строк, но он будет создавать указатель даты только один раз.

$('#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 не равно «Требуемая дата» или «Дата отправки»

...