jquery UI对话框:如何在没有标题栏的情况下初始化?

Loo*_*2nz 252 jquery jquery-ui

是否可以打开没有标题栏的jQuery UI对话框?

小智 287

我认为最好的解决方案是使用该选项dialogClass.

来自jquery UI文档的摘录:

在init期间: $('.selector').dialog({ dialogClass: 'noTitleStuff' });

或者如果你想在init之后.:

$('.selector').dialog('option', 'dialogClass', 'noTitleStuff');
Run Code Online (Sandbox Code Playgroud)

所以我创建了一个带有选项dialogClass ='noTitleStuff'和css的对话框:

.noTitleStuff .ui-dialog-titlebar {display:none}
Run Code Online (Sandbox Code Playgroud)

太简单 !!但我花了一天的时间来思考为什么我以前的id->类钻孔方法不起作用.事实上,当你调用.dialog()方法时,你变换的div变成了另一个div(真正的对话框div)的孩子,可能是div的'兄弟' titlebar,所以从前者开始尝试找到后者是非常困难的.

  • +1 Jonatan的解决方案不适用于特定对话框.你的确如此. (2认同)
  • 这种方法唯一的缺点是当Chrome配置为模态时Chrome会为这样的对话框添加一个垂直滚动条,因为jQuery开始错误地计算它的ui-widget-overlay高度...我没有深入挖掘,并且没有除了hacky {overflow:hidden}之外找不到快速修复 (2认同)
  • 不推荐使用dialogClass选项,取而代之的是使用ui-dialog属性的classes选项。 (2认同)

Loo*_*2nz 96

我想出了动态删除标题栏的修复方法.

$("#example").dialog(dialogOpts);
// remove the title bar
$(".ui-dialog-titlebar").hide();
Run Code Online (Sandbox Code Playgroud)

这将在渲染对话框后使用类"ui-dialog-titlebar"删除所有元素.

  • 好吧,我的选项只会删除这个对话框的标题栏.如果我使用了您的选项,我将删除所有对话框的标题栏.我可以在将来看到我需要一个标题栏. (9认同)
  • ...而css选项可以消除之前出现的任何机会.我不确定我看到你的替代方案有什么好处.实际上,你的替代方案是按照我的方式做,只增加一步.走CSS路线会更快. (3认同)
  • 所以你在css规则中包含你的元素:`#example .ui-dialog-titlebar ...`.它会以任何方式工作; 但是Javascript最终会设置css,所以我没有看到开始时不用css做的好处.这真的没什么区别 - 无论你最舒服:) (2认同)
  • 它只是我还是#example没有范围超过对话框标题? (2认同)
  • @Rice Flour Cookies:.hide()必须在.dialog()之后,因为.dialog()是将对话框的标记注入页面的内容.在该调用之前,页面还没有任何对话框元素. (2认同)

Sam*_*son 60

我相信你可以用CSS隐藏它:

.ui-dialog-titlebar {
    display: none;
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用以下dialogClass选项将其应用于特定对话框:

$( "#createUserDialog" ).dialog({
    dialogClass: "no-titlebar"
});
Run Code Online (Sandbox Code Playgroud)
.no-titlebar .ui-dialog-titlebar {
    display: none;
}
Run Code Online (Sandbox Code Playgroud)

查看" 主题化 "对话框.上面的建议使用了这个dialogClass选项,它似乎是出于支持新方法的选择.

  • 当人们谈论css太多时,他们拼写搞笑,不要他们 (3认同)
  • 不,我不相信可以选择删除它.默认情况下它是关闭按钮,所以在某种意义上它几乎是糟糕的设计. (2认同)

Ami*_*uda 55

我在我的项目中使用它

$("#myDialog").dialog(dialogOpts);
// remove the title bar
$("#myDialog").siblings('div.ui-dialog-titlebar').remove();
// one liner
$("#myDialog").dialog(dialogOpts).siblings('.ui-dialog-titlebar').remove();
Run Code Online (Sandbox Code Playgroud)

  • 更好的是:删除标题栏但不删除关闭按钮.保持其功能.`$(document).ready(function(){$('#video').click(function(){$("#dialog").dialog().siblings('.ui-dialog-titlebar'). removeClass('ui-widget-header');});});` (7认同)

小智 14

这对我有用:

$("#dialog").dialog({
    create: function (event, ui) {
        $(".ui-widget-header").hide();
    },
Run Code Online (Sandbox Code Playgroud)


Fir*_*man 8

尝试使用

$("#mydialog").closest(".ui-dialog-titlebar").hide();
Run Code Online (Sandbox Code Playgroud)

这将隐藏所有对话框标题

$(".ui-dialog-titlebar").hide();
Run Code Online (Sandbox Code Playgroud)


ode*_*dbd 7

实际上还有另一种方法,widget直接使用对话框:

你可以这样得到Dialog Widget

$("#example").dialog(dialogOpts);
$dlgWidget = $('#example').dialog('widget');
Run Code Online (Sandbox Code Playgroud)

然后呢

$dlgWidget.find(".ui-dialog-titlebar").hide();
Run Code Online (Sandbox Code Playgroud)

titlebar仅隐藏该对话框内的内容

并在一行代码中(我喜欢链接):

$('#example').dialog('widget').find(".ui-dialog-titlebar").hide();
Run Code Online (Sandbox Code Playgroud)

无需以这种方式向对话框添加额外的类,只需直接进行操作即可.工作对我来说很好.


ing*_*939 5

我发现使用open事件更有效,更可读,并从那里隐藏标题栏.我不喜欢使用页面全局类名搜索.

open: function() { $(this).closest(".ui-dialog").find(".ui-dialog-titlebar:first").hide(); }
Run Code Online (Sandbox Code Playgroud)

简单.

  • 这是我使用的方法,但使用了create:函数,因此它总是被隐藏,而不仅仅是在显示对话框时.我还将其更改为.remove()而不是.hide(),以确保它完全从对话框中消失. (2认同)