Problème d'index Z du sélecteur de date JQuery


106

J'ai un diaporama div, et j'ai un champ de sélection de date au-dessus de ce div.

Lorsque je clique dans le champ datepicker, le panneau datepicker s'affiche derrière le diaporama div.

Et j'ai mis le script comme suit:

http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.14/jquery-ui.min.js

Je ne peux donc pas changer le z-index de datepicker en CSS. Le z-index de datepicker que le script génère est 1 et mon diaporama div (appelant également via googleajaxapi) z-index est 5. Donc je suppose que je dois augmenter le z-index du sélecteur de date supérieur à 5. Alors y est un moyen de l'augmenter?

Quelqu'un peut m'aider?


Réponses:


176

Mettez le style suivant à l'élément de texte « entrée »: position: relative; z-index: 100000;.

Le div datepicker prend le z-index de l'entrée, mais cela ne fonctionne que si la position est relative.

En utilisant cette méthode, vous n'avez pas à modifier de javascript de l'interface utilisateur jQuery.


8
Le problème avec ceci est que votre entrée s'affichera au-dessus des autres éléments, c'est rarement l'effet désiré
Serj Sagan

1
Est-ce que cela est censé fonctionner lorsque datepicker est lié à une plage ?
rmoestl

10
position : relativen'est pas acceptable et ne fonctionne pas dans ma situation. la solution ci-dessous fonctionne très bien.
Kiwy

1
cela ne fonctionne pas sur le navigateur IE 11. Ce navigateur est-il spécifique?
Ashwini Maddala

3
Cette solution, bien qu'elle fonctionne, n'est pas valable pour toutes les situations. Le mieux est de remplacer par une seule ligne de CSS '.ui-datepicker {z-index: 9999! Important;}'
Daniel Tung

154

simplement dans votre utilisation css ' .ui-datepicker{ z-index: 9999 !important;}' Ici, 9999 peut être remplacé par la valeur de calque que vous voulez que votre datepicker soit disponible. Aucun code ne doit être commenté ni ajouter ' position:relative;' css sur les éléments d'entrée. Parce que l'augmentation du z-index des éléments d'entrée aura un effet sur tous les boutons de type d'entrée, ce qui peut ne pas être nécessaire dans certains cas.


Je devais utiliser datepickerplutôt queui-datepicker
M Smith

JavaScript utilise toujours des z-index discontinus, des contextes d'empilement arbitraires et a des problèmes de compatibilité entre navigateurs en 2016? ActionScript 3 FTW (il y a dix ans et encore aujourd'hui).
Triynko


14

Basé sur la réponse de marksyzm, cela a fonctionné pour moi:

$('input').datepicker({
    beforeShow:function(input) {
        $(input).css({
            "position": "relative",
            "z-index": 999999
        });
    }
});

1
Mais cela n'affecte que l'entrée et non la superposition de datepicker?
marksyzm

2
J'utilise cet exemple jqueryui.com/datepicker qui n'utilise pas d'icône pour le datepicker. Avec cette solution, je n'ai pas eu de problèmes avec le reste des composants Web.
Lucas le

5

En plus de la réponse de Justin, si vous vous inquiétez du balisage désordonné ou si vous ne voulez pas que cette valeur soit codée en dur dans CSS, vous pouvez définir l'entrée avant qu'elle ne soit affichée. Quelque chose comme ça:

$('input').datepicker({
    beforeShow:function(input){
        $(input).dialog("widget").css({
            "position": "relative",
            "z-index": 20
        });
    }
});

Notez que vous ne pouvez pas omettre la "position": "relative"règle, car le plugin recherche soit dans le style en ligne les deux règles, soit la feuille de style, mais pas les deux .

Le dialog("widget")est le datepicker réel qui apparaît.


1
Ce problème doit être résolu dans les scripts JqueryUI et être défini pour éviter les superpositions par défaut. La majorité des cas d'utilisation ne voudraient jamais qu'une entrée superpose les capacités d'entrée du calendrier. S'il est nécessaire de superposer des entrées (ou d'autres éléments) au calendrier, une solution comme celle-ci doit être utilisée. Cela dit, @marksyzm serait la meilleure solution IMO car vous ne l'appliqueriez qu'en cas de besoin.
FrankO

5

J'ai eu ce problème que j'ai résolu en utilisant sur clic:

var checkin = $('.dpd1').datepicker()
.on('click', function (ev) {
        $('.datepicker').css("z-index", "999999999");
}).data('datepicker');

Cette solution fonctionne parfaitement sur la fenêtre contextuelle pour moi. Merci !
darkomen

5

J'ai une boîte de dialogue qui utilise le datepicker dessus. C'était toujours caché. Lorsque j'ai ajusté le z-index, le champ du formulaire inférieur était toujours affiché dans la boîte de dialogue.

J'ai utilisé une combinaison de solutions que j'ai vues pour résoudre le problème.

$('.ui-datepicker', $form).datepicker({
                showButtonPanel: true,
                changeMonth: true,
                changeYear: true,
                dateFormat: "yy-M-dd",
                beforeShow: function (input) {
                    $(input).css({
                        "position": "relative",
                        "z-index": 999999
                    });
                },
                onClose: function () { $('.ui-datepicker').css({ 'z-index': 0  } ); }                    
            });

L'émission avant garantit que le sélecteur de date est toujours en haut lorsqu'il est sélectionné, mais onClose garantit que le z-index du champ est réinitialisé afin qu'il ne se chevauche pas sur les boîtes de dialogue ouvertes plus tard avec un autre sélecteur de date.


Cette solution est excellente et a résolu mon problème. Mais modifiez-le un peu sur la partie "onClose". Je mets $(this)au lieu de $('.ui-datepicker'). Ainsi, il sera défini z-index:0sur "cette entrée" au lieu de toutes les entrées avec la classe ui-datepicker.
Asuka165 le


1

J'ai une page où le sélecteur de date était au-dessus d'un bouton des outils de table datatables.net. Les boutons des tables de données avaient un z-index plus élevé que les boutons de date individuels du sélecteur de date. Grâce à la réponse de Ronye, ​​j'ai pu résoudre ce problème en utilisant position: relative; et z-index: 10000. Merci!


1

Cela m'est arrivé quand je manquais le thème. Assurez-vous que le thème existe, ou peut-être rechargez le thème et remettez-le en ligne sur votre serveur.


1

C'est ce qui a résolu mon problème:

 $( document ).ready(function() {   
    $('#datepickerid').datepicker({
     zIndexOffset: 1040 #or any number you want
     });
});

1

En fait, vous pouvez effectivement ajouter dans votre css .ui-datepicker{ z-index: 9999 !important;}mais vous pouvez modifier jquery-ui.cssou jquery-ui.min.csset ajouter à la fin de la classe ui-datepicker z-index: 9999 !important;. les deux choses fonctionnent pour moi (vous n'en avez besoin que d'un ;-))


0

J'ai également eu ce problème, puisque le sélecteur de date utilise le z-index de l'entrée, j'ai ajouté le css suivant

#dialogID input,.modal-dialog input, .modal-dialog .input-group .form-control{
  z-index:inherit;
}

Prenez simplement la règle qui s'applique à la vôtre, soit par id parent, classe, ou dans mon cas une boîte de dialogue d'amorçage, en utilisant leur groupe d'entrée et leur contrôle de formulaire.


0

j'ai dû

.datepicker.dropdown-menu {
    position: relative;
    z-index: 9999 !important;
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.