90 votes

Désactiver le sélecteur de date natif dans Google Chrome

Le sélecteur de date a atterri sur Chrome 20, y a-t-il un attribut pour le désactiver ? L'ensemble de mon système utilise le sélecteur de date jQuery UI et il est multi-navigateurs. Je souhaite donc désactiver le sélecteur de date natif de Chrome. Existe-t-il un attribut de balise ?

5 votes

144voto

Yacine Zalouani Points 1716

Pour cacher la flèche :

input::-webkit-calendar-picker-indicator{
    display: none;
}

Et pour cacher le message :

input[type="date"]::-webkit-input-placeholder{ 
    visibility: hidden !important;
}

3 votes

::-webkit-input-placeholder ne masquera pas le texte "mm/dd/yyyy" car il ne s'agit pas d'un caractère de remplacement, il est contrôlé de manière native.

1 votes

Il vous manque également un sélecteur. Pour référence : stackoverflow.com/a/11418704/229787

2 votes

Pour autant que je sache, cela ne fonctionne pas sur Android Chrome -. fiddle.jshell.net/RgY3t/138

53voto

rjmunro Points 10522

Si vous avez mal utilisé <input type="date" /> que vous pouvez probablement utiliser :

$('input[type="date"]').attr('type','text');

après leur chargement pour les transformer en entrées de texte. Vous devez d'abord attacher votre afficheur de date personnalisé :

$('input[type="date"]').datepicker().attr('type','text');

Ou vous pourriez leur donner un cours :

$('input[type="date"]').addClass('date').attr('type','text');

5 votes

Sans aucun doute ma solution préférée. Elle est simple et ne met pas en œuvre de sélecteurs CSS spécifiques au navigateur. Le résultat escompté, selon moi, est d'empêcher l'utilisation du contrôle natif si JavaScript est activé, ce qui permet d'utiliser un sélecteur de date personnalisé. Toutefois, si JavaScript est désactivé, les contrôles natifs fonctionnent toujours. Honnêtement, cela devrait être la réponse acceptée.

0 votes

Je crois que certaines versions d'IE (sinon toutes) ne permettent pas de changer le type d'une entrée. Bien sûr, cette question concerne Chrome, mais on pourrait penser que l'on souhaite une certaine cohérence entre les navigateurs...

2 votes

@travesty3 Ces versions d'IE supportent-elles les sélecteurs de date html5, ou se contentent-elles de texte ? Si ce n'est pas le cas, cela n'a pas d'importance.

16voto

Jimbo Points 190

Vous pourriez utiliser :

jQuery('input[type="date"]').live('click', function(e) {e.preventDefault();}).datepicker();

3 votes

Si vous utilisez jQuery >= 1.7 : jQuery('input[type="date"]').on('click', function(e) {e.preventDefault();}).datepicker();

1 votes

Cette réponse ne supprime pas le style natif. stackoverflow.com/a/11418704/229787

5 votes

@JustinBull C'est vrai, mais la question n'était pas de supprimer le style, mais de permettre l'utilisation du sélecteur de date jQuery, ce que cette réponse permet de faire. Avez-vous une idée de la façon dont le style peut également être supprimé ?

7voto

VisWebsoft Points 112

Avec Modernizr ( http://modernizr.com/ ), il peut vérifier cette fonctionnalité. Vous pouvez ensuite la lier au booléen qu'elle renvoie :

// does not trigger in Chrome, as the date Modernizr detects the date functionality.
if (!Modernizr.inputtypes.date) { 
    $("#opp-date").datepicker();
}

3 votes

C'est très utile pour revenir à l'indicateur de date de jQuery lorsqu'un indicateur de date natif n'est pas disponible. Cependant, comme cette question semble porter sur l'élimination du sélecteur de date de Chrome, j'ai rejeté votre réponse.

2voto

MartijnR Points 26

Le code ci-dessus ne définit pas la valeur de l'élément d'entrée et ne déclenche pas d'événement de modification. Le code ci-dessous fonctionne dans Chrome et Firefox (non testé dans d'autres navigateurs) :

$('input[type="date"]').click(function(e){
     e.preventDefault();
}).datepicker({
    onSelect: function(dateText){
        var d = new Date(dateText),
        dv = d.getFullYear().toString().pad(4)+'-'+(d.getMonth()+1).toString().pad(2)+'-'+d.getDate().toString().pad(2);
        $(this).val(dv).trigger('change');
    }
});

pad est une méthode simple et personnalisée de remplissage des chaînes de caractères avec des zéros (obligatoire).

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