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?

rubisiste
la source
Voici la solution stackoverflow.com/questions/11533161/…
Développeur

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.

Ronye Vernaes
la source
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.

Aakash Sahai
la source
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
16

travaillé pour moi

.hasDatepicker {
    position: relative;
    z-index: 9999;
}
Bashmakov Evgeniy
la source
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
        });
    }
});
Lucas
la source
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.

marksyzm
la source
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');
Waqleh
la source
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.

Harry Binnendyk
la source
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!

TMNetworks
la source
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.


la source
1

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

 $( document ).ready(function() {   
    $('#datepickerid').datepicker({
     zIndexOffset: 1040 #or any number you want
     });
});
Limilou
la source
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 ;-))

LeSage Stark
la source
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.

Jaynesify
la source
0

j'ai dû

.datepicker.dropdown-menu {
    position: relative;
    z-index: 9999 !important;
}
iMitwe
la source