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


Answers:


289

我认为最好的解决方案是使用option dialogClass

jQuery UI文档的摘录:

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

或者如果您想要在初始化之后。:

$('.selector').dialog('option', 'dialogClass', 'noTitleStuff');

所以我创建了一些对话框,其选项为dialogClass ='noTitleStuff'和诸如此类的css:

.noTitleStuff .ui-dialog-titlebar {display:none}

太简单 !!但是我花了一天的时间思考为什么以前的id-> class钻孔方法不起作用。实际上,当您调用.dialog()方法div时,要转换的div成为另一个div(真正的对话框div)的子级,并且可能成为div的“兄弟” titlebar,因此很难尝试从前一个div中查找后者。


2
+1 Jonatan的解决方案不适用于特定对话框。你的。
cetnar 2010年

1
我同意米扎尔。这是最好的解决方案,因为这一事实使您可以特定于那些仅具有定义的类的对话框。
卡洛斯·平托

2
此方法的唯一缺点是,当Chrome配置为模式对话框时,Chrome会为此类对话框添加垂直滚动条,因为jQuery会以某种方式开始错误地计算其ui-widget-overlay高度...我没有更深入地研究,除了
破解

1
dialogClass在jquery v 1.12中已弃用,它不会按预期影响对话框对象。
迷你冰箱

1
使用ui-dialog属性已不赞成使用dialogClass选项来支持classes选项。
Sandeep Saroha '18

96

我想出了一个动态删除标题栏的修复程序。

$("#example").dialog(dialogOpts);
// remove the title bar
$(".ui-dialog-titlebar").hide();

呈现对话框后,这将删除所有带有“ ui-dialog-titlebar”类的元素。


3
...而css选项消除了它们之前出现的任何机会。我不确定您能从中获得任何好处。实际上,您的选择将做我所做的事情,仅增加一个额外的步骤。使用CSS-Route会更快。
桑普森

10
好吧,我的选择只会删除该对话框的标题栏。如果使用您的选项,则将删除所有对话框的标题栏。我可以看到将来需要标题栏。
Loony2nz

2
因此,您将元素包括在css-rule:中#example .ui-dialog-titlebar...。它将以任何一种方式起作用。但是Javascript最终将设置CSS,所以我不认为从一开始就不要在CSS中进行设置会带来好处。确实并没有太大的区别-无论您对什么最满意:)
桑普森(Sampson)2009年

2
是我还是#example对话框标题没有作用域?
里约热内卢

2
@Rice Flour Cookies:.hide()必须在.dialog()之后,因为.dialog()是将对话框的标记注入到页面中的东西。在该调用之前,该页面还没有任何对话框元素。
杰里米·韦伯

62

我相信您可以使用CSS隐藏它:

.ui-dialog-titlebar {
    display: none;
}

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

$( "#createUserDialog" ).dialog({
    dialogClass: "no-titlebar"
});
.no-titlebar .ui-dialog-titlebar {
    display: none;
}

出对话框“ 主题化 ”。以上建议利用了的dialogClass选项,这似乎是在它的出路,取而代之的是新的方法。


是的,我想这会起作用,但这是全局选择。我想知道是否有一种方法可以使用选项。我想我可以做一些预渲染jquery'ness以在显示标题div之前将其删除。
Loony2nz

2
否。我不认为可以删除它。默认情况下,它是关闭按钮,因此从某种意义上说,这几乎是不好的设计。
桑普森

3
当人们谈论CSS太多时,他们拼写有趣,不是吗
bobobobo 2010年

另外,您可能不应该删除它,因为之后您将无法再移动对话框。也许不如把它没有文本和restyle它,所以它是又黑又瘦
bobobobo

如果您有其他事件触发对话框的关闭方法,则在某些情况下,您可能不需要标题栏上的关闭按钮。
卡洛斯·平托

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();

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

$("#myDialog").dialog('open').siblings('.ui-dialog-titlebar').remove();我认为对于此代码行+1是最好的答案
Jaylen 2015年

或者,您可以只查找前一个兄弟姐妹,即标题栏:.ui-dialog-titlebar:$("#myDialog").prev().hide()$("#myDialog").prev(".ui-dialog-titlebar").hide()
安德鲁(Andrew)

请投票,因为我有两个div,我只想隐藏一个。
Marcus Becker 2015年

15

这为我工作:

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

1
这将在所有对话框中隐藏标题。我在下面的建议(下一个答复)将仅针对当前打开的对话框。
ingredient_15939

很好...这意味着我不需要因为基本的CSS类而隐藏每个对话框...也意味着我不必分别设置对话框然后删除标题。
Gwasshoppa '16

8

尝试使用

$("#mydialog").closest(".ui-dialog-titlebar").hide();

这将隐藏所有对话框标题

$(".ui-dialog-titlebar").hide();

7

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

您可以因此获得对话框小部件

$("#example").dialog(dialogOpts);
$dlgWidget = $('#example').dialog('widget');

然后做

$dlgWidget.find(".ui-dialog-titlebar").hide();

只隐藏该titlebar对话框中的

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

$('#example').dialog('widget').find(".ui-dialog-titlebar").hide();

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


5

我发现使用open事件并从此处隐藏标题栏更加有效,也更具可读性。我不喜欢使用页面全局类名称搜索。

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

简单。


2
这是我使用的方法,但是使用了create:函数,因此它始终处于隐藏状态,而不仅仅是显示对话框时。我还将其更改为.remove()而不是.hide(),以确保将其完全从对话框中删除。
克里斯·波特

4

初始化对话框时,可以在使用dialogClass之后使用jquery隐藏标题栏。

在初始化期间:

$('.selector').dialog({
    dialogClass: 'yourclassname'
});

$('.yourclassname div.ui-dialog-titlebar').hide();

通过使用此方法,您不需要更改css文件,而且它也是动态的。


1
是的,这是mizar的解决方案-比您的发布早6个月。
Kirk Woll

我同意,但是随后您还必须添加一个CSS条目,这会使解决方案变得复杂。我的建议仅使用jQuery解决此问题。
阿伦·瓦苏德万·奈尔

4

我喜欢重写jQuery小部件。

(function ($) {
    $.widget("sauti.dialog", $.ui.dialog, {
        options: {
            headerVisible: false
        },
        _create: function () {
            // ready to generate button
            this._super("_create"); // for 18 would be $.Widget.prototype._create.call(this);
            // decide if header is visible
            if(this.options.headerVisible == false)
                this.uiDialogTitlebar.hide();
        },
        _setOption: function (key, value) {
            this._super(key, value); // for 1.8 would be $.Widget.prototype._setOption.apply( this, arguments );
            if (key === "headerVisible") {
                if (key == false)
                    this.uiDialogTitlebar.hide();
                else
                    this.uiDialogTitlebar.show();
                return;
            }
        }
    });
})(jQuery);

因此,您现在可以设置是否要显示标题栏

   $('#mydialog').dialog({
      headerVisible: false // or true
});

4

如果有多个对话框,则可以使用此对话框:

$("#the_dialog").dialog({
        open: function(event, ui) { 
            //hide titlebar.
            $(this).parent().children('.ui-dialog-titlebar').hide();
        }
    });

3

这是最简单的方法,它只会删除该特定对话框中的标题栏。

$('.dialog_selector').find('.ui-dialog-titlebar').hide();

2

隐藏对话框标题栏时发现的一件事是,即使不显示任何内容,屏幕阅读器仍会拾取并读取它。如果您已经添加了自己的标题栏,它将同时读取两个标题栏,从而引起混乱。

我所做的是使用将其从DOM中删除的$(selector).remove()。现在,屏幕阅读器(以及每个屏幕阅读器)将看不到它,因为它不再存在。



2

下一个表格解决了我的问题。

$('#btnShow').click(function() {
  $("#basicModal").dialog({
    modal: true,
    height: 300,
    width: 400,
    create: function() {
      $(".ui-dialog").find(".ui-dialog-titlebar").css({
        'background-image': 'none',
        'background-color': 'white',
        'border': 'none'
      });
    }
  });
});
#basicModal {
  display: none;
}
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/themes/smoothness/jquery-ui.css" />
<div id="basicModal">
  Here your HTML content
</div>
<button id="btnShow">Show me!</button>



1

这对我来说可以隐藏对话框标题栏:

$(".ui-dialog-titlebar" ).css("display", "none" );

1

这是可以做到的。

转到主题文件夹->基础->打开jquery.ui.dialog.css

追随者

如果您不想显示titleBar,则只需设置display:none即可,如下所示。

.ui dialog.ui-dialog .ui-dialog-titlebar 
{
    padding: .4em 1em;
    position: relative;
        display:none;
}

同样的标题。

.ui-dialog .ui-dialog-title {
    float: left;
    margin: .1em 0;
    white-space: nowrap;
    width: 90%;
    overflow: hidden;
    text-overflow: ellipsis;
    display:none; 
}

现在出现关闭按钮,您也可以将其设置为无,也可以将其设置为

.ui-dialog .ui-dialog-titlebar-close {
    position: absolute;
    right: .3em;
    top: 50%;
    width: 21px;
    margin: -10px 0 0 0;
    padding: 1px;
    height: 20px;

   display:none;

}

我做了很多搜索,但是什么也没想到。但这将影响整个应用程序没有关闭按钮,对话框的标题栏,但您也可以通过使用jquery并通过jquery添加和设置css来克服此问题

这是这个的语法

$(".specificclass").css({display:normal})

1
这行得通,并且有助于理解可以完成此操作,但是,如果您有多个.dialogs()且仅1个左右需要这些设置,那么除了以这种方式全局应用设置之外,还有其他方法。
Chef_Code

0

对我来说,我仍然想使用可调整大小的角,只是不想看到对角线。我用了

$(".ui-resizable-handle").css("opacity","0");

刚刚意识到我在评论错误的问题。不辜负我的同名:(



-1

您可以使用上述技术删除带有关闭图标的栏,然后自己添加一个关闭图标。

CSS:

.CloseButton {
background: url('../icons/close-button.png');   
width:15px;
height:15px;
border: 0px solid white;
top:0;
right:0;
position:absolute;
cursor: pointer;
z-index:999;
}

HTML:

var closeDiv = document.createElement("div");
closeDiv.className = "CloseButton";

//将此div附加到保存您的内容的div

JS:

 $(closeDiv).click(function () {
         $("yourDialogContent").dialog('close');
     });

-1

转到您的jquery-ui.js(在我的情况下为jquery-ui-1.10.3.custom.js)并搜索this._createTitlebar();。并发表评论。

现在,您的任何对话框都将显示标题。如果要自定义标题,请转到_createTitlebar();。并在其中编辑代码。

通过


进行这样的修改会导致升级的痛苦。
usr
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.