98 votes

Comment effacer/réinitialiser les dates sélectionnées dans le calendrier Datepicker de jQuery UI ?

Comment réinitialiser les valeurs du calendrier du sélecteur de date ? Les restrictions de date min et max ?

Le problème est que lorsque j'efface les dates (en supprimant les valeurs des zones de texte), les restrictions de la date précédente sont toujours appliquées.

J'ai fait le tri dans les documentation et rien ne m'a sauté aux yeux comme solution. Je n'ai pas non plus réussi à trouver une solution rapide en faisant une recherche sur SO/google.

http://jsfiddle.net/CoryDanielson/tF5MH/


Solution :

// from & to input textboxes with datepicker enabled
var dates = $("input[id$='dpFrom'], input[id$='dpTo']");

// #clearDates is a button to clear the datepickers
$('#clearDates').on('click', function(){
    dates.attr('value', '');
    dates.each(function(){
        $.datepicker._clearDate(this);
    });
});

_.clearDate() est une méthode privée de l'objet DatePicker. Vous ne la trouverez pas dans l'API publique sur le site Web de jQuery UI, mais elle fonctionne à merveille.

93voto

Leniel Macaferi Points 38324

J'ai essayé d'accomplir cette même chose, c'est-à-dire de vider le sélecteur de date pour que les filtres entrés par l'utilisateur puissent être supprimés. En cherchant un peu sur Google, j'ai trouvé ce joli morceau de code :

Vous pouvez ajouter la fonction d'effacement même pour les champs en lecture seule. Il suffit d'ajouter le code suivant à votre afficheur de date :

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

Les personnes pourront mettre en surbrillance (même les champs en lecture seule), puis utiliser la touche d'effacement ou la touche de suppression pour supprimer la date en utilisant la méthode suivante _clearDate fonction.

Source :

10 votes

Wow. Pourquoi cela ne serait-il pas rendu public ? ! Il est exclu de l'API sur jQuery UI ainsi.... n'a aucun sens. ---- J'ai modifié votre message pour que la solution corresponde mieux à ma question. Très belle découverte

0 votes

Accepte mon édition, j'ai modifié ta réponse pour qu'elle corresponde à ma question au lieu d'être un copier/coller de code incomplet.

0 votes

Votre modification n'est-elle pas déjà active ? Je ne vois pas d'option pour accepter votre modification... :)

76voto

coalvilledave Points 860

Avez-vous essayé :

$('selector').datepicker('setDate', null);

Cela devrait fonctionner selon le Documentation de l'API

0 votes

J'ai un formulaire avec une entrée de type "datepicker" que j'utilise pour modifier une date que je veux remplir en fonction de la date actuelle. J'ai trouvé cette solution pour réinitialiser mon formulaire d'édition avant d'utiliser "setDate" avec la date du jour, mais j'ai un problème de format : sans l'attribut "setDate", la date du jour n'est pas affichée. ('setDate', null) J'ai le format que je veux (JJ/MM/AAAA) mais quand je l'utilise, j'ai MM/DD/YYYY ...la seule différence est l'utilisation de ('setDate', null) Vous savez pourquoi ?

0 votes

Désolé Mickael - Je ne suis pas au courant. Avez-vous essayé de réinitialiser le format après avoir mis la date à zéro, comme indiqué dans le tableau ci-dessous ? stackoverflow.com/questions/1328025/ ?

24voto

Simon Wang Points 1927

Il suffit de remettre les options à zéro :

dates.datepicker( "option" , {
    minDate: null,
    maxDate: null} );

J'ai changé votre jsfiddle : http://jsfiddle.net/tF5MH/9/

0 votes

Oui, merci. Vous avez raison. C'est drôle, ce problème existe même sur la page de démonstration de jQuery UI Datepicker. jqueryui.com/demos/datepicker/#date-range Mettez la date, puis videz la zone de texte et le problème existe.

1 votes

C'est la façon la plus propre, pour sûr. date.datepicker( "option" , {setDate: null, minDate: null, maxDate: null} );

14voto

Soni Sharma Points 51
$('.date').datepicker('setDate', null);

11voto

j08691 Points 86464

Essayez de changer le code de compensation en :

$('#clearDates').on('click', function(){
    dates.attr('value', '');
    $("input[id$='dpFrom'], input[id$='dpTo']").datepicker( "option", "maxDate", null );
    $("input[id$='dpFrom'], input[id$='dpTo']").datepicker( "option", "minDate", null );
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X