2011-02-07 26 views
12

Vorrei aggiungere un controllo "Reset" al datapicker nella parte inferiore del calendario, dove va il controllo "close". Ciò consentirebbe all'utente di reimpostare l'input legato a datepicker in bianco (nessuna data).Data jQuery Data reset data

Non riesco a capire come scrivere la funzione di associazione, in particolare, come posso ottenere una sospensione dell'elemento associato al controllo?

 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

Ci sono alcune risposte utili in [questa discussione] (http://bugs.jqueryui.com/ticket/3999). Vedi, in particolare, [l'esempio di implementazione di pfurbacher qui] (http://jsbin.com/ofare/edit). – Ori

+0

possibile duplicato di [Come faccio a cancellare/ripristinare le date selezionate sul calendario jQuery UI Datepicker?] (Http://stackoverflow.com/questions/9435086/how-do-i-clear-reset-the-selected-dates -on-the-jquery-ui-datepicker-calendar) – freemanoid

risposta

21

Ecco una soluzione funzionante, basta chiamare cleanDatepicker() prima di qualsiasi chiamata a 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

Soluzione eccellente ... tranne che il titolo del pulsante è in polacco. Inoltre, suggerirei di metterlo in a (function() {})(); configurazione, piuttosto che creare una funzione con nome e chiamarla in seguito. – Brilliand

+1

Affinché questo funzioni, è necessario impostare l'opzione datepicker showButtonPanel su true. – deerchao

+0

Questa soluzione funziona con i pulsanti AJAX, ovvero, questa soluzione fa sì che AJAX si sottometta al server in chiaro? – Kawu

3

Stavo passando lo stesso problema, ovvero, nessuna opzione disponibile per svuotare il datepicker. Poi ho trovato questo commento super utile con un pezzo dolce di codice postato here:

Un modo rapido è possibile aggiungere la funzione chiara anche sulla sola lettura campi è quello di aggiungere il seguente codice al controllo datepicker esistente:

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

Ciò consentirà alle persone di evidenziare (che possono persino sui campi di sola lettura) e quindi utilizzare il backspace o eliminare per rimuovere la data utilizzando la funzione interna _clearDate.

+1

Va bene se si ignorano gli utenti mobile/tablet – Mathieu

+1

Nel mio test, utilizzando il pulsante backspace come questo in un campo readOnly si attiva il pulsante Indietro in chrome e cioè. Tuttavia, l'eliminazione funziona alla grande. Ricevi ancora +1 perché la funzionalità di sola lettura non fa parte della domanda posta. – SyntaxRules

5
  1. modificare l'etichetta Fatto per cancellare e aggiungere il codice per cancellare

    $(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. Aggiungi pulsante Annulla per il calendario

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

ho trovato una soluzione più bello:

$(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 non è definito in Firefox. – inputError

+0

Ho trovato una soluzione alternativa. BR, inputError – vellotis

0

Ecco lo scoop

Possiamo usare il tasto predefinito fatto di legare una funzione chiara personalizzata.

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

Funziona come un fascino. Saluti :);)

crediti: Sébastien Renauld e Behrang Bina

+0

@ Sébastien Renauld pulsante di cancellazione non sarà disponibile se rimescoli i mesi. checkout [collegamento] (http://jsbin.com/ofare/451/edit) – girish2040

5

Questo aggiungerà pulsante Cancella Jquery Calendario Questo sarà chiaro 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

Bel trucco, funziona – userlond

+0

Non funziona in firefox – Razvan