2011-02-07 14 views
12

Chciałbym dodać kontrolkę "Resetuj" do datepicker na dole kalendarza - gdzie idzie kontrola "zamknij". Umożliwiłoby to użytkownikowi zresetowanie danych wejściowych związanych z datepicker do pustego (bez daty).Data resetowania JQuery datePicker

Nie mogę wymyślić, jak napisać funkcję wiązania, w szczególności, w jaki sposób uzyskać chwyt elementu związany z formantem?

 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

Istnieje kilka przydatnych odpowiedzi w [tej dyskusji] (http://bugs.jqueryui.com/ticket/3999). Zobacz, w szczególności, przykładową implementację pfurbacher tutaj] (http://jsbin.com/ofare/edit). – Ori

+0

możliwy duplikat [Jak usunąć/zresetować wybrane daty w kalendarzu Datepicker interfejsu użytkownika jQuery?] (Http://stackoverflow.com/questions/9435086/how-do-i-clear-reset-the-selected-dates -on-the-jquery-ui-datepicker-calendar) – freemanoid

Odpowiedz

21

Oto działające rozwiązanie, wystarczy wywołać cleanDatepicker() przed każdym wywołaniem do 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

Doskonałe rozwiązanie ... z tym, że tytuł przycisku jest w języku polskim. Proponuję również umieścić to w (function() {})(); konfiguracji, zamiast tworzyć nazwaną funkcję i wywoływać ją później. – Brilliand

+1

Aby to zadziałało, musisz ustawić opcję datepicker showButtonPanel na true. – deerchao

+0

Czy to rozwiązanie działa dla przycisków AJAXed, to znaczy czy to rozwiązanie powoduje, że AJAX jest przesyłany do serwera w trybie czystym? – Kawu

3

Przechodziłem przez ten sam problem, to znaczy, nie ma opcji, aby opróżnić datepicker. I wtedy okazało to bardzo przydatna komentarz ze słodkim kawałkiem kodu pisał here:

Jeden szybki sposób można dodać wyraźną cechę nawet na tylko do odczytu pól jest, aby dodać następujący kod do istniejącej kontroli datepicker:

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

Umożliwia to podświetlanie osób (które mogą nawet w polach Tylko do odczytu), a następnie użycie opcji Backspace lub Delete w celu usunięcia daty przy użyciu wewnętrznej funkcji _clearDate.

+1

Jest to ok, jeśli zignorujesz użytkowników urządzeń mobilnych/tabletów. – Mathieu

+1

Podczas moich testów użycie przycisku Backspace w polu ReadOnly uruchamia przycisk Wstecz w chrome i ie. Jednak usunięcie działa świetnie. Wciąż otrzymujesz +1, ponieważ funkcja "tylko do odczytu" nie jest częścią zadawanego pytania. – SyntaxRules

5
  1. Zmiana Sporządzono etykieta wyczyścić i dodać kod, aby usunąć

    $(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. Dodaj przycisk Anuluj, aby kalendarzu

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

znalazłem ładniejszy rozwiązanie:

$(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 jest niezdefiniowany w Firefox. – inputError

+0

Znalazłem obejście. BR, inputError – vellotis

0

Oto miarka

Możemy użyć domyślnego zrobić przycisk, aby powiązać niestandardowy wyraźną funkcję.

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

Działa jak urok. Pozdrawiam :);)

ECTS: Sébastien Renauld i Behrang Bina

+0

@ Sébastien Renauld wyczyść przycisk nie będzie dostępny, jeśli przetasujesz miesiące. Kasa [link] (http://jsbin.com/ofare/451/edit) – girish2040

5

Doda przycisk Wyczyść Na Jquery Kalendarza To skasuje Data.

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

Dobra sztuczka, działa – userlond

+0

Nie działa w firefoxie – Razvan