Як видалити кнопку закриття в діалоговому вікні інтерфейсу jQuery?


775

Як видалити кнопку закриття ( X у верхньому правому куті) у діалоговому вікні, створеному інтерфейсом jQuery?


11
Перевірте документацію, перший підзаголовок: api.jqueryui.com/dialog
Майк Коул

1
@MikeCole Документація розрахована на 1.10 - Я думаю, якщо ви хочете приховати кнопку закриття в будь-яких нижчих версіях, вам потрібно зробити щось на зразок відповідей нижче.
Джарретт

1
Використовуйте "ui-dialog-title-close-close": "display: none;" коли ми встановлюємо модальний діалог
jqueryui

Відповіді:


711

Я виявив, що це спрацювало врешті-решт (зверніть увагу на третій рядок, який перекриває відкриту функцію, яка знаходить кнопку та приховує її):

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

Щоб приховати кнопку закриття у всіх діалогах, ви також можете використовувати наступний CSS:

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

121
$(".ui-dialog-titlebar-close", ui).hide();щоб приховати кнопку лише для цього діалогового вікна.
Ентоні Сердюков

67
Я також не міг змусити його працювати від параметру ui. Я в кінцевому підсумку використовував: $ (". Ui-dialog-titlebar-close", $ (this) .parent ()). Hid ();
Найджел

70
@Anton Просто хочу зазначити, що просто вказати "ui" не працює. ви повинні використовувати 'ui.dialog'. тому правильний рядок буде $ (". ui-dialog-titlebar-close", ui.dialog) .hide ();
Бредлі Маунтфорд,

22
@Bradley ui не працював для мене, ui.dialog робив, але застосовувався у всіх екземплярах. Щоб робота не застосовувалася лише до тієї, для якої визначена функція відкриття, я повинен був зробити це: $ (". Ui-dialog-titlebar-close", this.parentNode) .hide ();
Набаб

12
open: function(event, ui) { $(".ui-dialog-titlebar-close").hide(); }
opengrid

361

Ось ще один варіант просто за допомогою CSS, який не перевершує кожен діалог на сторінці.

CSS

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

HTML

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

Javascript.

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

Робочий приклад


6
Мені подобається такий підхід, тому що я можу використовувати його поряд із такими речами, як: .noTitleDlg .ui-dialog-title-панель {display: none} в CSS, щоб створити так, як я хочу, щоб мій діалог з’являвся та вев себе, а потім просто встановив діалоговий клас відповідно.
А. Мюррей

11
дуже чисте рішення ... +1 для неприйняття додаткової функціональності js для видалення кнопки.
Бонги

2
Чудова ідея. Корисно націлювати на конкретний діалог у ситуаціях, коли ви використовуєте один і той же відкритий метод для всіх діалогів, і не дуже практично його змінювати для конкретного примірника.
ZolaKt

3
Моє улюблене рішення. Я думав, що щось подібне було б найкращим підходом. Дякуємо, що тут вже зашифровано. Спираючись на це, мені подобається використовувати цю варіацію, яка буде приймати атрибут класу вмісту дію діалогового вікна, в який я можу поставити клас "не закрити":dialogClass : $("#my-dialog-id").attr("class"),
LS

Це рішення дозволяє закрити втечу, якщо ви хочете запобігти закриттю під час втечі:$( ".selector" ).dialog({ dialogClass: 'no-close' , closeOnEscape: false,});
Младен Адамович

124

відповідь "найкращий" не буде корисною для кількох діалогів. ось краще рішення.

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

23
Це складніше, ніж потрібно. $(".ui-dialog-titlebar-close", $(this).parent()).hide();
Кевін Панько

@KevinPanko, ваша пропозиція працює добре, використовуючи приклад, наведений на демонстраційному сайті jquery ui з ASP.NET v2.0 на сторінці .aspx. jqueryui.com/demos/dialog/modal-form.html
Метью Даллі

6
.closest ('. ui-dialog') краще, ніж припускати батьків.
техногена

86

Ви можете використовувати CSS, щоб приховати кнопку закриття замість JavaScript:

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

Якщо ви не хочете впливати на всі модалі, можете скористатися таким правилом

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

І застосувати .hide-close-btnдо верхнього вузла діалогового вікна


3
Ця відповідь була легкою та однозначною. Однак це застосовується, лише якщо ви бажаєте відключити кнопку для всіх діалогових вікон.
Марк Бріттінгем

@MarkBrittingham Ви можете просто застосувати користувальницький клас CSS до свого модального режиму та до селектора, тоді це стосуватиметься того, кого ви хочете
Хуан Мендес

48

Як показано на офіційній сторінці та запропоновано Девідом:

Створіть стиль:

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

Потім ви можете просто додати клас незакриття до будь-якого діалогового вікна, щоб приховати кнопку закриття:

$( "#dialog" ).dialog({
    dialogClass: "no-close",
    buttons: [{
        text: "OK",
        click: function() {
            $( this ).dialog( "close" );
        }
    }]
});

41

Я думаю, що це краще.

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

Проблема полягає в тому, що вона періодично приховує кнопку закриття і для інших діалогів. як запобігти цьому.
Завед Аббасі

Навіть використовуючи функцію open: function (event, ui) {$ (this) .closest ('. Ui-dialog'). Find ('. Ui-dialog-titlebar-close'). Show (); } не працює.
Завід Аббасі

34

Після того, як ви зателефонували .dialog()на елемент, ви можете знайти кнопку закриття (та іншу діалогову розмітку) у будь-який зручний час, не використовуючи обробники подій:

$("#div2").dialog({                    // call .dialog method to create the dialog markup
    autoOpen: 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
    }
});

FYI, діалогова розмітка виглядає так:

<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>

Демо тут


25

Відповідь Роберта Маклайна не спрацювала для мене.

Однак це для мене працює:

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

9
$("#div2").dialog({
   closeOnEscape: false,
   open: function(event, ui) { $('#div2').parent().find('a.ui-dialog-titlebar-close').hide();}
});

9

Жоден із перерахованих вище не працює. Рішення, яке справді працює:

$(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
})

Перевірте, чи працює він для вас.


7

Найкращий спосіб приховати кнопку - це відфільтрувати її за атрибутом data-icon:

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


6

Для дезактивації класу короткий код:

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

може використовуватися.


6

Кнопка закриття, додана віджетом Dialog, має клас "ui-dialog-title-bar-close", тому після вашого первинного виклику до .dialog () ви можете використовувати такий вислів, щоб знову видалити кнопку закриття: Це працює ..

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

6

Я вловлюю близьку подію діалогового вікна. Потім цей код видаляє <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();
  });
},

5
$(".ui-button-icon-only").hide();

2
Ви повинні мати можливість використовувати прямий CSS тут, а не JS, якщо ви лише ховаєте значок. Все .hide()дійсно встановлено display:noneв CSS, тому $(".ui-button-icon-only").hide();він функціонально еквівалентний.ui-button-icon-only { display: none; } .
KyleMit

3

Ви також можете видалити заголовок:

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

яка знімає кнопку закриття.



2

Простий спосіб досягти: (Зробіть це у своєму 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 button
    show: {
        effect: "clip",
        duration: 500
    },
    hide: {
        effect: "blind",
        duration: 200
    },
    ....
});

1

Оскільки я виявив, що роблю це в кількох місцях у своєму додатку, я загорнув його у плагін:

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

0

Я фанат однолінійки (де вони працюють!). Ось що для мене працює:

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

0

Як щодо використання цієї чистої лінії CSS? Я вважаю це найчистішим рішенням діалогу з заданим Id:

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

-1

Ви можете видалити кнопку закриття за допомогою коду нижче. Є й інші варіанти, з якими ви можете боротися з корисними.

$('#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();
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.