Problema z-index del selettore di date Jquery


106

Ho un div presentazione e ho un campo datepicker sopra quel div.

Quando faccio clic nel campo datepicker, il pannello datepicker viene visualizzato dietro il div presentazione.

E ho inserito lo script come:

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

Quindi non posso cambiare lo z-index di datepicker in CSS. Lo z-index del datepicker che lo script sta generando è 1 e il mio div per la presentazione (chiamato anche tramite googleajaxapi) z-index è 5. Quindi immagino di dover aumentare lo z-index del date picker maggiore di 5. Quindi c'è qualche modo per aumentarlo?

Qualcuno può aiutarmi?


Risposte:


176

Inserire il seguente stile presso l'elemento di testo 'input': position: relative; z-index: 100000;.

Il div datepicker prende lo z-index dall'input, ma funziona solo se la posizione è relativa.

In questo modo non è necessario modificare alcun javascript dall'interfaccia utente di jQuery.


8
Il problema con questo è che il tuo input verrà visualizzato sopra altri elementi, questo è raramente l'effetto desiderato
Serj Sagan

1
Dovrebbe funzionare quando datepicker è associato a un intervallo ?
rmoestl

10
position : relativenon è accettabile e non funziona nella mia situazione. la soluzione qui sotto funziona bene.
Kiwy

1
questo non funziona sul browser IE 11. Questo browser è specifico?
Ashwini Maddala

3
Questa soluzione, sebbene funzioni, non è valida per tutte le situazioni. La cosa migliore è sostituire con una singola riga di CSS ".ui-datepicker {z-index: 9999! Important;}"
Daniel Tung

154

semplicemente nel tuo css usa ' .ui-datepicker{ z-index: 9999 !important;}' Qui 9999 può essere sostituito con qualsiasi valore di livello tu voglia che il tuo datepicker sia disponibile. Né il codice deve essere commentato né l'aggiunta di position:relative;"css" sugli elementi di input. Perché l'aumento dello z-index degli elementi di input avrà effetto su tutti i pulsanti del tipo di input, che potrebbe non essere necessario in alcuni casi.


Ho dovuto usare datepickerpiuttosto cheui-datepicker
M Smith

JavaScript utilizza ancora z-index discontinui, contesti di stack arbitrari e ha problemi di compatibilità tra browser nel 2016? ActionScript 3 FTW (dieci anni fa e ancora oggi).
Triynko


14

Basato nella risposta Marksyzm, questo ha funzionato per me:

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

1
Ma questo riguarda solo l'input e non l'overlay del datepicker?
marksyzm

2
Sto usando questo esempio jqueryui.com/datepicker che non usa un'icona per il datepicker. Con questa soluzione non ho avuto problemi con il resto dei componenti web.
Lucas,

5

Aggiungendo alla risposta di Justin, se sei preoccupato per il markup disordinato o non vuoi che questo valore sia codificato in CSS, puoi impostare l'input prima che venga mostrato. Qualcosa come questo:

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

Nota che non puoi omettere la "position": "relative"regola, poiché il plug-in cerca nello stile inline entrambe le regole o il foglio di stile, ma non entrambi .

Il dialog("widget")è il DatePicker effettivo che si apre.


1
Questo problema dovrebbe essere risolto negli script JqueryUI ed essere impostato per impedire le sovrapposizioni per impostazione predefinita. La maggior parte dei casi di utilizzo non vorrebbe mai alcun input che si sovrapponga alle funzionalità di input del calendario. Se è necessario che l'input (o altri elementi) si sovrapponga al calendario, è necessario utilizzare una soluzione come questa. Detto questo, @marksyzm sarebbe la soluzione migliore IMO in quanto lo applicheresti solo quando necessario.
FrankO

5

Ho avuto questo problema che ho risolto utilizzando al clic:

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

Questa soluzione funziona perfettamente sulla finestra popup per me. Grazie !
darkomen

5

Ho una finestra di dialogo che utilizza il datepicker su di essa. Era sempre nascosto. Quando ho regolato lo z-index, il campo nella forma inferiore veniva sempre visualizzato nella finestra di dialogo.

Ho utilizzato una combinazione di soluzioni che ho visto per risolvere il problema.

$('.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  } ); }                    
            });

Lo spettacolo prima assicura che il datepicker sia sempre in primo piano quando selezionato, ma onClose assicura che lo z-index del campo venga ripristinato in modo che non si sovrapponga a nessuna finestra di dialogo aperta successivamente con un diverso datepicker.


Questa soluzione è ottima e ha risolto il mio problema. Ma modificalo un po 'nella parte "onClose". Metto $(this)invece di $('.ui-datepicker'). Quindi, verrà impostato z-index:0su "questo input" invece di tutti gli input con la classe ui-datepicker.
Asuka165


1

Ho una pagina in cui il datepicker era in cima a un pulsante tabletools di datatables.net. I pulsanti dei datatables avevano uno z-index più alto rispetto ai singoli pulsanti di datepicker. Grazie alla risposta di Ronye sono stato in grado di risolvere questo problema utilizzando position: relative; e z-index: 10000. Grazie!


1

Questo è successo a me quando mi mancava il tema. Assicurati che il tema esista, o magari ricaricalo e ricaricalo sul tuo server.


1

Quello che ha risolto il mio problema:

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

1

In effetti puoi effettivamente aggiungere nel tuo css .ui-datepicker{ z-index: 9999 !important;}ma puoi modificare jquery-ui.csso jquery-ui.min.csse aggiungere alla fine della classe ui-datepicker z-index: 9999 !important;. entrambe le cose funzionano per me (te ne serve solo una ;-))


0

Ho avuto anche questo problema, poiché il datepicker utilizza lo z-index dell'input, ho aggiunto il seguente css

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

Prendi la regola che si applica al tuo, o per id genitore, classe o nel mio caso una finestra di dialogo di bootstrap, usando il loro gruppo di input e il controllo del modulo.


0

Dovevo

.datepicker.dropdown-menu {
    position: relative;
    z-index: 9999 !important;
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.