【问题标题】:jQuery UI dialog: vertical scroll works not correct if dialog height more than window heightjQuery UI 对话框:如果对话框高度大于窗口高度,则垂直滚动不正确
【发布时间】:2012-01-27 10:47:41
【问题描述】:

代码如下:

<script type="text/javascript">
    $(function(){
        var dialogOptions = {
            title: "Header",
            autoOpen: false,
            modal: true,
            width: 400,
            height: 1000
        };
        $(".wnd").dialog(dialogOptions);
        $("#btn").click(function(){ $(".wnd").dialog("open"); });
    });
</script>

<style>
    .wnd {background:yellow;height:900px;width:300px;}
</style>

<div class="wnd"></div>
<button id="btn">click me</button>

当对话框打开并高于主窗口时,有一个侧滑块,如果您尝试在鼠标光标的帮助下拖动它,它不会向下滑动(看起来像被锁定)。

但是当按下键盘上的按钮(箭头)或使用鼠标滚轮向下滚动时,它会很好地滑动。

这里是demo on jsfiddle

如何激活那个侧滑条?

谢谢!

【问题讨论】:

  • 滚动被禁用,因为对话框是modal。您可以设置modal:false 以允许再次滚动。但是你想要一个 modal 对话框吗?
  • @andyb,如果对话框本身比窗口高,那么主窗口缺乏滚动可能会受到限制。另一种可能性是在对话框本身上强制滚动条,但在某些情况下,滚动整个窗口会是更好的体验。

标签: jquery-ui jquery-ui-dialog


【解决方案1】:

一个干净的解决方案是这样的:

http://jsfiddle.net/4fc33/6/

我正在做的是包装 jQuery UI 覆盖创建方法以关闭阻止滚动正常工作的事件。

【讨论】:

  • 迷人;非常感谢分享这个。我只在 Chrome 中遇到了这个问题,这解锁了滚动条,我还没有注意到任何负面影响。
【解决方案2】:

无法使用窗口滑块的另一种方法是在对话窗口本身上启用滑块。如果您在对话框的最大高度上设置上限,这些将自动显示,但对于某些版本的 jQueryUI 可能会有点棘手。

至少在我使用的 jQueryUI 版本(1.9)上,我需要自己指定最大高度,因为根据the documentation 应该能够使用的 maxHeight 属性不起作用*。

以下是有效的:

$("#dialog").dialog({
    modal: true,
    width: "auto",
    height: "auto"
    /* maxHeight: whatever won't work, */
}).css("maxHeight", window.innerHeight-120);

我从窗口的高度减去 120 个像素,以适应对话框窗口的页眉和页脚部分及其“确定”按钮。

* 如果尝试调整对话框的大小,最大高度实际上会生效——但不会在显示时生效。

【讨论】:

  • 仅供参考,虽然这是一个旧答案,但它仍然是 IMO 上最好的。但是,截至目前(2017/18),maxHeight 参数现在可以在 .dialog 对象上正常工作。
  • 使用 maxHeight 参数对我有用,而这个答案没有......即使它应该......
猜你喜欢
  • 2012-05-20
  • 1970-01-01
  • 1970-01-01
  • 2011-11-28
  • 1970-01-01
  • 2018-06-17
  • 1970-01-01
  • 1970-01-01
  • 2011-01-09
相关资源
最近更新 更多