jQuery日期选择器Z-index问题


106

我有一个幻灯片div,并且该div上方有一个datepicker字段。

当我单击“日期选择器”字段时,日期选择器面板显示在幻灯片div的后面。

我把脚本写成:

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

所以我不能在CSS中更改datepicker的z-index。脚本正在生成的datepicker的z索引是1,我的幻灯片div(也通过googleajaxapi调用)z索引是5。所以我想我必须将日期选择器的z索引增加到大于5。有什么办法增加吗?

有人可以帮我吗?


Answers:


176

将以下样式放在“输入”文本元素上:position: relative; z-index: 100000;

datepicker div从输入中获取z索引,但这仅在位置相对时才有效。

使用这种方式,您无需从jQuery UI修改任何JavaScript。


8
问题在于您的输入将显示在其他元素之上,这很少达到预期的效果
Serj Sagan 2013年

1
datepicker绑定到跨度时,该方法应该起作用吗?
rmoestl

10
position : relative是不可接受的,在我的情况下不起作用。解决方案如下。
Kiwy 2013年

1
这不适用于IE 11浏览器。这个浏览器是特定的吗?
Ashwini Maddala'3

3
该解决方案虽然有效,但并非在所有情况下都有效。最好是使用CSS'.ui-datepicker {z-index:9999!important;}'单行覆盖
Daniel Tung

154

只需在CSS中使用' .ui-datepicker{ z-index: 9999 !important;}',即可将9999替换为您希望日期选择器可用的任何图层值。既不注释任何代码,也不position:relative;在输入元素上添加' 'CSS。因为增加输​​入元素的z索引会影响所有输入类型的按钮,所以在某些情况下可能不需要。


我不得不使用datepicker而不是ui-datepicker
史密斯M 2014年

JavaScript仍使用不连续的z索引,任意堆栈上下文,并且在2016年存在跨浏览器兼容性问题?ActionScript 3 FTW(十年前,直到今天)。
Triynko


14

基于marksyzm答案,这对我有用:

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

1
但这仅影响输入,而不影响日期选择器覆盖吗?
markyzm

2
我正在使用这个示例jqueryui.com/datepicker,它没有为datepicker使用图标。使用此解决方案,我对其余的Web组件没有任何问题。
卢卡斯

5

添加到贾斯汀的答案中,如果您担心标记不整洁,或者您不希望在CSS中使用硬编码此值,则可以在显示输入之前进行设置。像这样:

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

请注意,您不能忽略该"position": "relative"规则,因为该插件在两种规则或样式表中都以内联样式显示,但不是两者都以

dialog("widget")是实际弹出的日期选择器。


1
此问题应在JqueryUI脚本中解决,并默认设置为防止覆盖。大多数用例永远不会希望任何输入覆盖日历输入功能。如果需要输入(或其他元素)覆盖日历,则应使用类似的解决方案。话虽如此,@ marksyzm将是IMO的最佳解决方案,因为您仅在需要时才应用它。
FrankO 2014年

5

我通过单击使用解决了这个问题:

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

对于我来说,此解决方案在弹出窗口上工作完美。谢谢 !
darkomen

5

我有一个使用日期选择器的对话框。它始终是隐藏的。当我调整z-index时,下部窗体上的字段始终显示在对话框中。

我使用了解决问题的综合解决方案。

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

之前的显示确保选择时datepicker始终位于最上面,但是onClose确保重置该字段的z-index,以使其在以后使用其他datepicker打开的任何对话框中不重叠。


这个解决方案很棒,解决了我的问题。但是在“ onClose”部分进行一些编辑。我放了$(this)代替$('.ui-datepicker')。因此,它将设置z-index:0为“此输入”,而不是ui-datepicker类的所有输入。
飞鸟165


1

我有一个页面,其中的日期选择器位于datatables.net tabletools按钮的顶部。数据表按钮的z-index值高于单个日期选择器日期按钮。感谢Ronye的回答,我能够通过使用position:relative;来解决此问题。和z-index:10000。谢谢!


1

当我错过主题时,这发生在我身上。确保该主题存在,或者可能重新定义主题,然后将其重新上传到您的服务器。


1

那解决了我的问题:

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

1

实际上,您可以有效地添加CSS,.ui-datepicker{ z-index: 9999 !important;}但是可以在ui-datepicker类的末尾进行修改jquery-ui.cssjquery-ui.min.css添加z-index: 9999 !important;。这两件事对我都有效(您只需要一个;-)


0

我也有这个问题,因为datepicker使用输入的z-index,所以我添加了以下CSS

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

只需使用适用于您的规则,即可使用父ID,类,或者在我的情况下是引导对话框,使用它们的输入组和表单控件。


0

我不得不

.datepicker.dropdown-menu {
    position: relative;
    z-index: 9999 !important;
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.