2011-02-07 4 views
12

Я хотел бы добавить элемент «Сброс» в datepicker в нижней части календаря, где находится элемент управления «закрыть». Это позволит пользователю сбросить ввод, привязанный к datepicker, на пустой (без даты).JQuery datePicker date reset

Я не могу понять, как написать функцию связывания, в частности, как я могу получить элемент, связанный с элементом управления?

 if (this.displayClear) { 
      $pop.append(
       $('<a href="#" id="dp-clear">' + $.dpText.TEXT_CLEAR + '</a>') 
       .bind(
        'click', 
        function() 
        { 
          c.clearSelected(); 
          //help! reset the value to '': $(this.something).val('') 
          c._closeCalendar(); 
        } 
       ) 
      ); 
     } 
+0

В [этой дискуссии] есть несколько полезных ответов (http://bugs.jqueryui.com/ticket/3999). См., В частности, [пример реализации pfurbacher] здесь (http://jsbin.com/ofare/edit). – Ori

+0

Возможный дубликат [Как очистить/сбросить выбранные даты в календаре Datepicker пользователя jQuery?] (Http://stackoverflow.com/questions/9435086/how-do-i-clear-reset-the-selected-dates -on-the-jquery-ui-datepicker-calendar) – freemanoid

ответ

21

Это рабочее решение, просто вызовите cleanDatepicker() перед любым вызовом datepicker.

function cleanDatepicker() { 
    var old_fn = $.datepicker._updateDatepicker; 

    $.datepicker._updateDatepicker = function(inst) { 
     old_fn.call(this, inst); 

     var buttonPane = $(this).datepicker("widget").find(".ui-datepicker-buttonpane"); 

     $("<button type='button' class='ui-datepicker-clean ui-state-default ui-priority-primary ui-corner-all'>Delete</button>").appendTo(buttonPane).click(function(ev) { 
      $.datepicker._clearDate(inst.input); 
     }) ; 
    } 
} 
+1

Отличное решение ... кроме того, что название кнопки на польском языке. Кроме того, я бы предложил поместить это в (function() {})(); а не создавать именованную функцию и вызывать ее позже. – Brilliand

+1

Чтобы это сработало, вы должны установить для параметра datepicker значение showButtonPanel значение true. – deerchao

+0

Использует ли это решение для кнопок AJAXed, т. Е. Делает ли это решение причиной отправки AJAX на сервер на ясности? – Kawu

3

Я сталкивался с этой же проблемой, то есть у вас не было опции для опорожнения даты. Затем я нашел это супер полезный комментарий со сладким куском кода отправил here:

Один быстрый способ, которым Вы можете добавить четкую функцию даже читать только те поля, чтобы добавить следующий код в ваш существующий контроль Datepicker:

}).keyup(function(e) { 
    if(e.keyCode == 8 || e.keyCode == 46) { 
     $.datepicker._clearDate(this); 
    } 
}); 

Это позволит людям выделить (что они могут даже в поля Только для чтения), а затем использовать обратное пространство или удалить, чтобы удалить дату, используя внутреннюю функцию _clearDate.

+1

Это нормально, если вы игнорируете пользователей мобильных/планшетов – Mathieu

+1

В моем тестировании, используя кнопку backspace, подобную этой в поле readOnly, запускается кнопка возврата в хром и т. Д. Однако удаление отлично работает. Вы по-прежнему получаете +1, потому что функция только для чтения не является частью заданного вопроса. – SyntaxRules

5
  1. Изменение Готово ярлык очистить и добавить код, чтобы очистить

    $(document).ready(function() { 
        $("#startdate").datepicker({ 
         showOn: 'both', 
         buttonImageOnly: true, 
         buttonImage: "css/images/calendar.gif", 
         showButtonPanel: true, 
         closeText: 'Clear', 
         onClose: function (dateText, inst) { 
          $(this).val(''); 
         } 
        }); 
    }); 
    
  2. Добавить кнопку Отмена в календарь

    $("#termdate").datepicker({ 
        showOn: 'both', 
        buttonImageOnly: true, 
        buttonImage: "css/images/calendar.gif", 
        showButtonPanel: true, 
        beforeShow: function (input) { 
         setTimeout(function() { 
          var buttonPane = $(input).datepicker("widget") 
           .find(".ui-datepicker-buttonpane"); 
          var btn = $('<button class="ui-datepicker-current' 
           + ' ui-state-default ui-priority-secondary ui-corner-all"' 
           + ' type="button">Clear</button>'); 
          btn.unbind("click").bind("click", function() { 
           $.datepicker._clearDate(input); 
          }); 
          btn.appendTo(buttonPane); 
         }, 1); 
        } 
    }); 
    
13

Я нашел более хорошее решение:

$(document).ready(function() { 
    $(".datepicker").datepicker({ 
      showOn: 'focus', 
      showButtonPanel: true, 
      closeText: 'Clear', // Text to show for "close" button 
      onClose: function() { 
       var event = arguments.callee.caller.caller.arguments[0]; 
       // If "Clear" gets clicked, then really clear it 
       if ($(event.delegateTarget).hasClass('ui-datepicker-close')) { 
        $(this).val(''); 
       } 
      } 
    }); 
}); 

http://jsfiddle.net/swjw5w7q/1/

+1

window.event не определен в Firefox. – inputError

+0

Я нашел обходное решение. BR, inputError – vellotis

0

Вот совок

Мы можем использовать кнопку по умолчанию сделано, чтобы связать пользовательский четкую функцию.

$("#date_picker").datepicker({minDate:myDate,dateFormat: 'yy-mm-dd',showButtonPanel:true,closeText:'Clear', 
    beforeShow: function(input) { 
     setTimeout(function() { 
     var clearButton = $(input) 
      .datepicker("widget") 
      .find(".ui-datepicker-close"); 
     clearButton.unbind("click").bind("click",function(){$.datepicker._clearDate(input);}); 
     }, 1); 
    } 
}); 

Работы как очарование. Ура :);)

кредитов: Себастьен Renauld и Behrang бина

+0

@ Кнопка сброса Sébastien Renauld недоступна, если вы перетасовываете месяцы. checkout [link] (http://jsbin.com/ofare/451/edit) – girish2040

5

Это добавит кнопку Clear на Jquery Календаре, которая очистит Дата.

$("#txtDOJ").datepicker({ 
    showButtonPanel: true, 
    closeText: 'Clear', 
    onClose: function (dateText, inst) { 
     if ($(window.event.srcElement).hasClass('ui-datepicker-close')) { 
      document.getElementById(this.id).value = ''; 
     } 
    } 
}); 
+0

Приятный трюк, он работает – userlond

+0

Он не работает в firefox – Razvan