jQuery的UI日期选择器更改Z索引


83

这个问题很简单,尽管我很难弄清楚如何解决它。

我正在使用jQuery-ui datepicker以及自定义的“ ios样式开/关切换”。此切换开关使用一些绝对定位的元素,这些元素当前显示在我的日期选择器顶部。

请参阅下面覆盖7月6日的丑陋圈子...

在此处输入图片说明

做这件事的肮脏方法(至少是imo)是在我的一个样式表中编写样式,但是我宁愿在启动选择器时使用一些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
我认为您页面的CSS上的css!important规则比javascript更为简洁,因为z-indexCSS属性,可以用于样式设置。如果我必须执行JS解决方案,则可以style在其头部添加标签-不仅在CSS中使用它可以使您的JS代码更短,更整洁,而且可以无缝地应用于所有日期选择器实例。
法布里西奥磨砂


@Lance不是一个骗子,因为我问如何在不向CSS添加一行的情况下动态地完成它
Greg Guida

@FabrícioMatté我想我只是不想用jquery-ui边缘情况的一些愚蠢替代来破坏我的css。style头部中的标签与我正在寻找的标签有点接近,但是我真正想要做的是更改date-picker元素上的style属性。
格雷格·吉达

我已经在CSS文件的底部保留了一个空间,仅用于我开始的每个项目中的jQuery UI hack。但是,是的,我提交了一个纯jQuery解决方案的答案,解释了CSS为什么将成为更清洁的解决方案,现在您可以选择哪个解决方案使用。=]
法布里西奥磨砂

Answers:


142

您问题中的JS代码不起作用,因为jQuerystyle每次调用时都会重置datepicker小部件的属性。

一个简单的方法来覆盖它stylez-index是与!important前面已经提到的CSS规则另一种答案。另一个答案建议在输入元素本身上设置position: relative;z-index,并将其自动复制到Datepicker小部件中。

但是,根据要求,如果出于任何原因您确实需要动态设置它,向页面添加更多不必要的代码并进行处理,则可以尝试以下操作:

$('.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 hack远不像IMO那样丑陋,我仅在CSS中为jQuery UI调整保留了一个空间(这恰好在页面中的IE6调整之上)。


5
我可以告诉你你有多少摇滚!?首先尝试了无数其他方法。谢谢!
Bretticus 2013年

感谢您的回答,它可以正常工作,但是,一旦刷新日期选择器(例如,您更改了月份),z-index就会重新设置为默认值,因此我认为此回答需要稍作调整,即添加以下内容onChangeMonthYear:function(){setTimeout(function(){$('。ui-datepicker')。css('z-index',99999999999999);},0); }
Gombo 2014年

@Gombo我相信如果您使用一种CSS方法(在JS之上进行了介绍)会更容易,因为这些方法的功能远不那么强大。;)
法布里西奥磨砂

至少在FF中,最大数字长10位,因此9的9可能更好(尽管FF乐于无误地转换为2147483647)。
Campbeln 2015年

+1指出要设置z-index为输入DOM。那是唯一对我<input .... style="z-index: 9999;"/>
塞巴斯蒂安

88

有一种更优雅的方法。添加此CSS:

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

jQuery会将日历设置z-index为101(比相应元素大一)。该position字段必须是absoluterelativefixed。jQuery搜索第一个元素的父元素,它是绝对的/相对的/固定的,并采用其“z-index


2
这绝对是最好的解决方案。+1
保罗·张伯伦

像魅力一样工作!谢谢
brando

完美,但就我而言:.datepicker-dropdown {z-index:999999!important;}
ujjaval 2015年

几乎是完美的,但是如果您不知道要日期选择器施加其自身的zindex最大值,则该方法将不起作用。
MFAL


7

当我尝试将datepicker与bootstrap模式结合使用时,这对我有用:

$('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”设置为1051,因为引导模态的z-index设置为1050。


5

现在,日期选择器将弹出的z-index设置为其关联字段多一个,以使其保持在该字段的前面,即使该字段本身在弹出对话框中也是如此。默认情况下,z索引为0,因此datepicker最终以1结尾。是否存在未正确显示datepicker的情况?jQuery论坛帖子

要获得100的z-index。您需要输入,z-index:99;并且JQueryUI会将datepicker更新为z-index:100

<input style="z-index:99;"><input class="high-z-index">和CSS .high-z-index { z-index: 99; }

您还可以指定要继承的z-index,该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
彼得于2002年

1

就我而言,没有任何效果。我需要将z-index添加到具有日期选择器的输入类型。

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

0

这是用于Bootstrap datetimepicker

如果您的日期选择器由于滚动而隐藏,则在div中使用:

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

在整个div的CSS中,其中包含您的日期选择器和其他项,例如

.dialogModel{
    overflow-x: visible !important;
    overflow-y: visible !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.