jquery-ui datepicker changez-index


83

私はそれを解決する方法を理解するのに苦労していますが、問題はかなり簡単です。

カスタムメイドの「iosスタイルのオン/オフトグル」と一緒にjQuery-uidatepickerを使用しています。このトグルは、現在私の日付ピッカーの上に表示されているいくつかの絶対位置の要素を使用します。

以下の7月6日をカバーする醜い円を参照してください...

ここに画像の説明を入力してください

これを行うための汚い方法(少なくともimo)は、スタイルシートの1つにスタイルを書き込むことですが、これを行うためにピッカーが起動するときにJavaScriptを使用したいと思います。

私はすでに試しました

$('.date_field').datepicker(); 
$('.date_field').datepicker("widget").css({"z-index":100});

そして

$('.date_field').datepicker({
    beforeShow: function(input, inst) { 
        inst.dpDiv.css({"z-index":100});
    }
});

しかし、日付ピッカーが起動されるたびにz-indexが上書きされるようです。

どんな助けでも大歓迎です!


3
z-indexCSSプロパティであり、スタイル設定のために存在するため、ページのcssのcss!importantルールはjavascriptよりもはるかにクリーンであると考えています。JSソリューションを実行する必要がある場合はstyle、ヘッドにタグを追加することになります。CSSにタグを含めると、JSコードが短くクリーンに保たれるだけでなく、日付ピッカーのすべてのインスタンスにシームレスに適用されます。
FABRICIOマット


@Lanceは、CSSに行を追加せずに動的に実行する方法を尋ねているため、重複ではありません
Greg Guida 2012

@FabrícioMattéjquery-uiエッジケースの愚かなオーバーライドでCSSを台無しにしたくないと思います。style頭の中のタグは私が探しているものに少し近いですが、私が本当にやりたいのは、日付ピッカー要素のスタイル属性を変更することです。
グレッグギダ2012

開始するすべてのプロジェクトでjQueryUIハック専用のCSSファイルの下部にスペースをすでに予約していますが、そうです、CSSがよりクリーンなソリューションになる理由を説明する純粋なjQueryソリューションで回答を送信しました。使用する。=]
FABRICIOマット

回答:


142

jQuerystyleは、datepickerウィジェットを呼び出すたびにその属性をリセットするため、質問のJSコードは機能しません。

style'をオーバーライドする簡単な方法z-index!important別の回答ですでに述べたように、CSSルールを使用することです。さらに別の答えは、Datepickerウィジェットに自動的にコピーされる入力要素自体の設定position: relative;と設定を提案z-indexしています。

ただし、要求に応じて、何らかの理由で実際に動的に設定し、不要なコードを追加してページに処理する必要がある場合は、次のことを試すことができます。

$('.date_field').datepicker({
    //comment the beforeShow handler if you want to see the ugly overlay
    beforeShow: function() {
        setTimeout(function(){
            $('.ui-datepicker').css('z-index', 99999999999999);
        }, 0);
    }
});

フィドル

z-indexウィジェットを呼び出すたびに、jQuery UIによってリセットされた後、ウィジェットのを設定するための遅延関数オブジェクトを作成しました。それはあなたのニーズで十分なはずです。

CSSハックははるかに醜いIMOではありません。私はCSSにjQueryUIの調整用のスペースを予約しています(これは私のページのIE6の調整のすぐ上です)。


5
どれだけ揺れるか教えてもいいですか!?最初に他の無数のことを試みました。ありがとうございました!
Bretticus 2013年

回答ありがとうございます。機能しますが、日付ピッカーが更新されると(たとえば、月を変更すると)、z-indexがデフォルトに戻るため、この回答には少し調整が必要だと思います。つまり、次を追加します。 onChangeMonthYear:function(){setTimeout(function(){$( '。ui-datepicker')。css( 'z-index'、9999999999999);}、0); }
ゴンボ2014年

@Gomboハックがはるかに少ないCSSアプローチ(JSアプローチの上で説明)の1つを使用する方が簡単だと思います。;)
FABRICIOマット

少なくともFFでは、最大数は10桁の長さなので、9つの9の方が良いかもしれません(ただし、FFはエラーなしで2147483647に変換できます)。
Campbeln 2015

z-index入力DOMに設定するように指示するための+1 。それが私のために働いた唯一のことでした:<input .... style="z-index: 9999;"/>
セバスチャン

88

それを行うためのよりエレガントな方法があります。このCSSを追加します。

.date_field {position: relative; z-index:100;}

jQueryはカレンダーz-indexを101(対応する要素より1つ多い)に設定します。positionフィールドがなければなりませんabsoluterelativeまたはfixed。jQueryは、絶対/相対/固定である最初の要素の親を検索し、その親を取得します。z-index


2
これは間違いなく最良の解決策です。+1
ポールチェンバレン

チャームのように働いた!ありがとう
ブランド2015

完璧ですが、私の場合:.datepicker-dropdown {z-index:999999!important;}
ujjaval 2015

ほぼ完璧ですが、日付ピッカーがそれ自体に課すzindexの最大値がわからない場合は機能しません。
MFAL 2016年

21

CSSを使用して!importantインラインz-index値を強制するには、句を使用する必要があります。

.ui-datepicker{z-index: 99 !important};

申し訳ありませんが、私には機能しません-z-indexはjQueryによって要素に設定されます。これは!importantよりも優先されます
Dylan Hamilton-Foster

1
@ DylanHamilton-フォスターはよろしいですか?スタイルが実際に適用されているかどうかを確認するために、他のタグ、つまりBackgroundColorを追加していただけますか?
エマヌエーレグレコ

7

これは、datepickerをブートストラップモーダルと組み合わせて使用​​しようとしたときに機能しました。

$('input[id^="txtDate"]').datepicker();
$('input[id^="txtDate"]').on('focus', function (e) {
    e.preventDefault();
    $(this).datepicker('show');
    $(this).datepicker('widget').css('z-index', 1051);
});

もちろん、自分のニーズに合わせてセレクターを変更してください。ブートストラップモーダルのz-indexが1050に設定されているため、「z-index」を1051に設定しました。


5

datepickerは、ポップアップz-indexを関連するフィールドより1つ多く設定し、そのフィールド自体がポップアップダイアログにある場合でも、そのフィールドの前に保持するようになりました。デフォルトでは、z-indexは0であるため、datepickerは1になります。これがdatepickerを正しく表示しない場合はありますか?JQueryフォーラムの投稿

100のz-indexを取得するには。を入力する必要があり、z-index:99;JQueryUIは日付ピッカーを次のように更新しますz-index:100

<input style="z-index:99;"> または<input class="high-z-index">およびcss .high-z-index { z-index: 99; }

ダイアログボックスから継承するz-indexを指定して、jQueryUIにz-indexを適切に検出させることもできます。

<input style="z-index:inherit;"> または<input class="inhert-z-index">およびcss .inherit-z-index { z-index: inherit; }


1

最良の自然な方法は、日付ピッカー要素を、「相対」位置を持ち、コントロールの上に表示されている要素よりも高い「z-index」を持つ「プラットフォーム」に配置することです...


4
意味のあるコードを追加して、詳細を説明してくださいBEST NATURAL way
Peter

1

私の場合、何も機能しませんでした。日付ピッカーのある入力タイプにz-indexを追加する必要がありました。

<input type="text" class="datepicker form-control" datatype="date" style="z-index: 10000;" id="txtModalDate">

0

これはBootstrapdatetimepicker用です

スクロールがdivに表示されるために日付ピッカーが非表示になっている場合は、次を使用します。

overflow-x: visible !important;
overflow-y: visible !important;

日付ピッカーやその他のアイテムを含むdiv全体のCSS

.dialogModel{
    overflow-x: visible !important;
    overflow-y: visible !important;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.