jQuery Dialog 和 Datepicker 插件的问题

Posted

技术标签:

【中文标题】jQuery Dialog 和 Datepicker 插件的问题【英文标题】:Trouble with jQuery Dialog and Datepicker plugins 【发布时间】:2010-10-17 11:19:21 【问题描述】:

我有一个对话框,对话框上有一个日期选择器字段。

当我打开对话框并单击日期选择器字段时,日期选择器面板显示在对话框后面。

我尝试了更多属性:zindex、stack、bgiframe,但没有成功。

有人可以帮助我吗?

Tks.

【问题讨论】:

【参考方案1】:

旧答案

z-index(注意连字符!)是重要的属性。确保将其设置为大于对话,并确保将其设置在正确的元素上。以下是我们的做法:

#ui-datepicker-div 

 z-index: 1000; /* must be > than popup editor (950) */

API 变更 - 2010 年 4 月 17 日

在日期选择器的 CSS 文件中,找到 .ui-datepicker 项并更改它:

.ui-datepicker  width: 17em; padding: .2em .2em 0; z-index: 9999 !important; 

使用 z-index: 9999 !important; 在 Firefox 3.5.9 (Kubuntu) 中工作。

【讨论】:

我将对话框的 zIndex 属性更改为 1,并使用您包含的此代码。这篇文章解决了我的问题。谢谢。 只是为了更新这个答案,它现在需要是 z-index:1002。 JQuery 对话框使用内联样式:style="overflow: hidden; display: block; position: absolute; z-index: 1001; outline-color: -moz-use-text-color; outline-style: none; outline-width: 0px; height: auto; width: 350px; top: 309.5px; left: 413.5px;" 经过几分钟的探索,jQuery Dialog 似乎每次都在增加它的 z-index。我不确定这是否是一个错误,但将#ui-datepicker-div z-index 设置为 9999 可以修复它。 添加position 总是好的,relative 通常会完成这项工作【参考方案2】:

对于 jquery-ui-1.8

<style type="text/css">
    .ui-datepicker
    
        z-index: 1003 !important; /* must be > than popup editor (1002) */
    
</style>

重要的是因为 datepicker 有一个 element.style 将 z-index 设置为 1。

【讨论】:

我尝试了另一种不起作用的方法。 Jonatan 的解决方案非常简单,非常完美!这是我在找到这个 CSS 解决方案之前正在处理的代码。 $('#ui-datepicker-div').css("z-index","1000");【参考方案3】:

这对我有用:

.ui-datepicker 
        z-index: 9999 !important;
    

【讨论】:

【参考方案4】:

在“输入”文本元素中添加以下样式:“位置:相对;z-index:100000;”。

datepicker div 从输入中获取 z-index,但这仅适用于相对位置。

使用这种方式,您不必从 jQuery UI 修改任何 javascript

【讨论】:

我真的认为这是最好的方法,因为它开辟了动态设置 zIndex 的可能性。在此页面上查看我的其他完整答案。【参考方案5】:

从 UI 版本 1.7.2 开始,ui-datepicker-div 不再是有效的 css 元素。 “ui-datepicker”似乎是最外面的包装器,据我所知,将 z-index 设置为 99999 对我来说工作正常

【讨论】:

【参考方案6】:

对于 jquery-ui-1.7.2

<style type="text/css">
    .ui-datepicker
    
        z-index: 1003; /* must be > than popup editor (1002) */
    
</style>

【讨论】:

【参考方案7】:

将此设置在页面顶部。它会正常工作:

<style type="text/css">
.ui-datepicker z-index:10100;
</style>

【讨论】:

!importance 标志是覆盖内联样式所必需的【参考方案8】:

我通过调用得到它的工作

$("#ui-datepicker-div").css("z-index", "1003" );

【讨论】:

【参考方案9】:

我很震惊:

a) 这里没有人提到设置日期选择器 z-Index 的编程解决方案 b) jQuery DatePicker 在将其绑定到元素时无法传递 z-Index。

我正在使用js方法来计算最高索引。我们默认只检查 div,因为这些元素很可能获得 z-index 值,并且比解析页面上的每个元素更快,这是可以理解的。

/* Get the highest zindex for elements on the page
*/
function getHighestZIndex(element)
    var index_highest = 0;
    var index_current;
    if(element == undefined)
        element = 'div';
    
    $(element).each(function()
        index_current = parseInt($(this).css("z-index"), 10);
        if(index_current > index_highest) 
            index_highest = index_current;
        
    );
    return index_highest;

因为我们必须使用javascript将datepicker绑定到一个元素上,即$('#some_element').datepicker(),此时我们设置了目标元素的样式,这样datepicker就会从中获取z-index它。感谢 Ronye Vernaes(在本页的回答中)指出 datepicker() 将拾取目标元素的 z-Index(如果它有一个并设置为 position: relative:

$(this.target).datepicker();
var zindex = e.getHighestZIndex();
zindex++;
$(this.target).css('position','relative');
$(this.target).css('z-index',zindex);

this.target 是我们在 datepicker 字段中输入的元素。 在绑定时,我们获取页面上最高的 z-index 并使元素的 z-index 高一级。 单击日期选择器图标时,它将从输入元素中拾取该 z-index,因为正如 Ronye Vernaes 所提到的,样式位置:相对。

在此解决方案中,我们不会尝试猜测最高 z-Index 值将是多少。我们实际上得到了它。

【讨论】:

【参考方案10】:

对话框在 iframe 中呈现,并呈现在其他所有内容(包括下拉菜单)之上。同时,日期选择器以普通 html 呈现并绝对定位。

听起来日期选择器是绝对相对于父页面而不是 iframe 呈现的。您是否尝试过将日历作为标准的、非绝对定位的博客放在对话框中?或者您可以使用下拉菜单。

【讨论】:

取决于他使用的是哪个对话框(问题没有说)。我们使用的不使用 iframe,但我相信还有其他的。 我使用的对话框是jQuery UI 1.3.2版本的jQuery库插件。 是的,我假设是 jQuery UI,它确实使用了 iframe【参考方案11】:

jquery datepicker 1.8.3版本的解决方法,改变z-index值,通过css改变也不是不可能。

这个很好用:

jQuery('.ui-datepicker-trigger').click(function() 
        setTimeout(function() 
            jQuery('#ui-datepicker-div').css('z-index', 999);
        , 500)
    );

【讨论】:

【参考方案12】:

日期选择器现在将弹出窗口 z-index 设置为比其关联字段多一,以将其保持在该字段的前面,即使该字段本身在弹出对话框中也是如此。默认情况下,z-index 为 0,因此 datepicker 以 1 结束。是否存在无法正确显示 datepicker 的情况? JQuery Forum Post

要获得 100 的 z-index。您需要输入 z-index:99;,JQueryUI 会将日期选择器更新为 z-index:100

&lt;input style="z-index:99;"&gt;&lt;input class="high-z-index"&gt; 和 css .high-z-index z-index: 99;

您还可以指定要继承的 z-index,哪个应该从您的对话框继承,并让 jQueryUI 正确检测 z-index。

&lt;input style="z-index:inherit;"&gt;&lt;input class="inhert-z-index"&gt; 和 css .inherit-z-index z-index: inherit;

【讨论】:

以上是关于jQuery Dialog 和 Datepicker 插件的问题的主要内容,如果未能解决你的问题,请参考以下文章

jquery中的dialog()方法是怎么使用。我引入了dialog.js。

在Iframe中使用jquery ui dialog 怎么使弹出窗口居于浏览器中间

jquery dialog 怎样半透明

jquery dialog 弹窗问题

如何用 jquery dialog 方式双层弹出窗口?

jquery ui dialog 怎么设置 才能居中