如何删除jQuery UI对话框上的关闭按钮?

如何删除jQuery UI创建的对话框上的关闭按钮(右上角的X)?

439053 次浏览

您可以使用CSS来隐藏关闭按钮而不是JavaScript:

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

如果你不想影响所有的情态动词,你可以使用这样的规则

.hide-close-btn .ui-dialog-titlebar-close{display: none;}

并将.hide-close-btn应用于对话框的顶部节点

我最终发现这是有效的(注意第三行覆盖了找到按钮并隐藏它的open函数):

$("#div2").dialog({closeOnEscape: false,open: function(event, ui) {$(".ui-dialog-titlebar-close", ui.dialog || ui).hide();}});

要隐藏所有对话框上的关闭按钮,您也可以使用以下CSS:

.ui-dialog-titlebar-close {visibility: hidden;}

“最好”的答案对多个对话不会有好处。这里有一个更好的解决方案。

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

我捕获对话框的关闭事件。然后此代码删除<div>#dhx_combo_list):

open: function(event, ui) {//hide close button.$(this).parent().children().children('.ui-dialog-titlebar-close').click(function(){$("#dhx_combo_list").remove();});},
$("#div2").dialog({closeOnEscape: false,open: function(event, ui) { $('#div2').parent().find('a.ui-dialog-titlebar-close').hide();}});

我觉得这样比较好。

open: function(event, ui) {$(this).closest('.ui-dialog').find('.ui-dialog-titlebar-close').hide();}

隐藏按钮的最佳方法是使用它的data-icon属性对其进行过滤:

$('#dialog-id [data-icon="delete"]').hide();

这是另一个仅使用CSS的选项,它不会覆盖页面上的每个对话框。

的css

.no-close .ui-dialog-titlebar-close {display: none }

超文本标记语言

<div class="selector" title="No close button">This is a test without a close button</div>

Javascript。

$( ".selector" ).dialog({ dialogClass: 'no-close' });

工作示例

http://jsfiddle.net/marcosfromero/aWyNn/

$('#yourdiv').                 // Get your box ...dialog().                    // ... and turn it into dialog (autoOpen: false also works)prev('.ui-dialog-titlebar'). // Get title bar,...find('a').                   // ... then get the X close button ...hide();                      // ... and hide it

对于停用类,短代码:

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

可以使用。

以上都不行。真正有效的解决方案是:

$(function(){//this is your dialog:$('#mydiv').dialog({// Step 1. Add an extra class to our dialog to address the dialog directly. Make sure that this class is not used anywhere else:dialogClass: 'my-extra-class'})// Step 2. Hide the close 'X' button on the dialog that you marked with your extra class$('.my-extra-class').find('.ui-dialog-titlebar-close').css('display','none');// Step 3. Enjoy your dialog without the 'X' link})

请检查它是否适合您。

在元素上调用.dialog()后,您可以在任何方便的时间找到关闭按钮(和其他对话框标记),而无需使用事件处理程序:

$("#div2").dialog({                    // call .dialog method to create the dialog markupautoOpen: false});$("#div2").dialog("widget")            // get the dialog widget element.find(".ui-dialog-titlebar-close") // find the close button for this dialog.hide();                           // hide it

替代方法:

在对话框事件处理程序中,this指的是“对话框”元素,$(this).parent()指的是对话框标记容器,因此:

$("#div3").dialog({open: function() {                         // open event handler$(this)                                // the element being dialogged.parent()                          // get the dialog widget element.find(".ui-dialog-titlebar-close") // find the close button for this dialog.hide();                           // hide it}});

仅供参考,对话框标记看起来像这样:

<div class="ui-dialog ui-widget ui-widget-content ui-corner-all ui-draggable ui-resizable"><!-- ^--- this is the dialog widget --><div class="ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix"><span class="ui-dialog-title" id="ui-dialog-title-dialog">Dialog title</span><a class="ui-dialog-titlebar-close ui-corner-all" href="#"><span class="ui-icon ui-icon-closethick">close</span></a></div><div id="div2" style="height: 200px; min-height: 200px; width: auto;" class="ui-dialog-content ui-widget-content"><!-- ^--- this is the element upon which .dialog() was called --></div></div>

这里有演示

罗伯特·麦克莱恩的回答对我不起作用。

然而,这确实对我有用:

$("#div").dialog({open: function() { $(".ui-dialog-titlebar-close").hide(); }});

您还可以删除标题行:

<div data-role="header">...</div>

它删除了关闭按钮。

由Dialog小部件添加的关闭按钮具有类'用户界面-dialog-titlebar',因此在首次调用. dialog()之后,您可以使用这样的语句再次删除关闭按钮:#36825;行

$( 'a.ui-dialog-titlebar-close' ).remove();

如官方页面所示,由David建议:

创建样式:

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

然后,您可以简单地将非关闭类添加到任何对话框中,以隐藏它的关闭按钮:

$( "#dialog" ).dialog({dialogClass: "no-close",buttons: [{text: "OK",click: function() {$( this ).dialog( "close" );}}]});
$(".ui-button-icon-only").hide();
document.querySelector('.ui-dialog-titlebar-close').style.display = 'none'

您可以使用下面的代码删除关闭按钮。还有其他选项可能对您有用。

$('#dialog-modal').dialog({//To hide the Close 'X' button"closeX": false,//To disable closing the pop up on escape"closeOnEscape": false,//To allow background scrolling"allowScrolling": true})//To remove the whole title bar.siblings('.ui-dialog-titlebar').remove();

因为我发现我在我的应用程序中的几个地方这样做,我把它包装在一个插件中:

(function ($) {$.fn.dialogNoClose = function () {return this.each(function () {// hide the close button and prevent ESC key from closing$(this).closest(".ui-dialog").find(".ui-dialog-titlebar-close").hide();$(this).dialog("option", "closeOnEscape", false);});};})(jQuery)

使用示例:

$("#dialog").dialog({ /* lots of options */ }).dialogNoClose();

实现的简单方法:(在您的Javascript中执行此操作)

$("selector").dialog({autoOpen: false,open: function(event, ui) {   // It'll hide Close button$(".ui-dialog-titlebar-close", ui.dialog | ui).hide();},closeOnEscape: false,        // Do not close dialog on press Esc buttonshow: {effect: "clip",duration: 500},hide: {effect: "blind",duration: 200},....});

我是一句话的粉丝(他们工作的地方!)。以下是对我有用的方法:

$("#dialog").siblings(".ui-dialog-titlebar").find(".ui-dialog-titlebar-close").hide();

如何使用这个纯CSS行?我发现这是给定ID的对话框的最干净的解决方案:

.ui-dialog[aria-describedby="IdValueOfDialog"] .ui-dialog-titlebar-close { display: none; }

这是针对jQuery UI 1.12的。我为“类”选项添加了以下配置设置

        classes: {'ui-dialog-titlebar-close': 'hidden',},

整个对话框初始化看起来像这样:

ConfirmarSiNo(titulo, texto, idPadre, fnCerrar) {const DATA_RETORNO = 'retval';$('confirmar-si-no').dialog({title: titulo,modal: true,classes: {'ui-dialog-titlebar-close': 'hidden',},appendTo: `#${idPadre}`,open: function fnOpen() { $(this).text(texto); },close: function fnClose() {let eligioSi = $(this).data(DATA_RETORNO) == true;setTimeout(function () { fnCerrar(eligioSi); }, 30);},buttons: {'Si, por favor': function si() { $(this).data(DATA_RETORNO, true); $(this).dialog("close"); },'No, gracias': function no() { $(this).data(DATA_RETORNO, false); $(this).dialog("close"); }}});}

我使用以下脚本调用来显示它:

ConfirmarSiNo('Titulo','¿Desea actualizar?',idModalPadre,(eligioSi) => {if (eligioSi) {this.$tarifa.val(tarifa.tarifa);this.__ActualizarTarifa(tarifa);}});

在Html主体中,我有以下包含对话框的div:

<div class="modal" id="confirmar-si-no" title="" aria-labelledby="confirmacion-label">mensaje</div>

最终结果是:

输入图片描述

函数'ConfimarSiNo'基于帖子如何在JQuery UI对话框中实现“确认”对话框?上的''答案

对于那些使用对话扩展jQuery Extension的人,您可以使用closable选项来管理此功能以及此体面扩展提供的许多其他调整。

请注意,如果您已经在使用DialogExtend,则上述任何Dialog CSS黑客都会在初始化时被DialogExtend重创。