2009-05-22 3 views
715

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

+10

Проверьте документацию, первый суб -title: http://api.jqueryui.com/dialog/ –

+1

@MikeCole Документация для 1.10 - я думаю, если вы хотите скрыть кнопку закрытия в любых более низких версиях, вам нужно будет сделать что-то вроде ответов ниже. – Jarrett

+0

Используйте «ui-dialog-titlebar-close»: «display: none;» когда мы настраиваем модальный диалог jqueryui – MarcoZen

ответ

662

я нашел это работало в конце (обратите внимание на третью строку переопределяет открытую функцию, которая найти кнопку и скрывающую ее):

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

Чтобы скрыть кнопку закрытия на всех диалогах вы можете использовать следующий CSS тоже:

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

'$ (". Ui-dialog-titlebar-close ", ui) .hide();' чтобы скрыть кнопку только для ** этого ** диалога. –

+0

@ Джонхен, вы используете его в контексте ответа Роберта выше? Он должен работать, поскольку 'ui' определяется как аргумент функции. См. Также http://api.jquery.com/jQuery/#jQuery1 –

+65

Я не мог заставить его работать с параметром ui. Я закончил использование: $ (". Ui-dialog-titlebar-close", $ (this) .parent()). Hide(); – Nigel

82

Вы можете использовать CSS, чтобы скрыть кнопку закрытия вместо JavaScript:

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

Этот ответ был простым и понятным.Он применяется, однако, только в том случае, если вы хотите отключить кнопку для всех диалогов. –

121

«лучший» ответ не подходит для нескольких диалогов. вот лучшее решение.

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

Это сложнее, чем вам нужно. '$ (". ui-dialog-titlebar-close ", $ (this) .parent()). hide();' –

+0

@KevinPanko Ваше предложение хорошо работает при использовании примера, представленного демонстрационным сайтом jquery ui с ASP. NET v2.0 на странице .aspx. http://jqueryui.com/demos/dialog/modal-form.html –

+5

.closest ('. ui-dialog') лучше, чем предполагать родителя. – technomage

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

yaaaay! Это действительно работает! Я поймаю событие закрытия диалогового окна. В приведенном выше коде он удаляет div (#dhx_combo_list).

Отлично, спасибо всем!

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

Я думаю, что это лучше.

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

Проблема в том, что она иногда прячет кнопку для других диалогов. как это предотвратить. –

+0

Использование open: function (event, ui) { $ (this) .closest ('. Ui-dialog'). Find ('. Ui-dialog-titlebar-close'). Show(); } не работает. –

7

Лучший способ скрыть кнопку, чтобы отфильтровать его с его атрибуты значка данные:

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

Вот еще один вариант, только с помощью 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' }); 

Working Example

+6

Мне нравится этот подход, потому что я могу использовать его рядом с такими вещами, как: .noTitleDlg .ui-dialog-titlebar {display: none} в CSS, чтобы создать способ, которым я хочу, чтобы мой диалог отображался и вел себя, а затем просто установите dialogClass соответственно , –

+9

очень чистое решение ... +1 за отсутствие дополнительных функций js для удаления кнопки. – Bongs

+2

Отличная идея.Пригодится, чтобы настроить таргетинг на конкретный диалог в ситуациях, когда вы используете один и тот же открытый метод для всех диалогов, и это не очень удобно изменить его для конкретного экземпляра. – ZolaKt

6

Для деактивации класса, короткого кода:

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

могут быть использованы.

9

Ничего из перечисленного не работает. Решение, которое действительно работает, это:

Проверьте, не работает ли он на вас.

33

После того, как вы назвали .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 относится к элементу, «dialogged» и $(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> 

Demos here

25

Роберта Маклина не работает для меня.

Однако это работает для меня:

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

Вы также можете удалить строку заголовка:

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

, который удаляет кнопку закрытия.

6

Кнопка закрытия, добавленная виджетами Dialog, имеет класс «ui-dialog-titlebar-close», поэтому после вашего первоначального вызова .dialog() вы можете использовать оператор, подобный этому, для повторного удаления кнопки закрытия: Он работает ..

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

Как показано на официальном page и предложил Давиду:

Создание стиля:

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

Тогда вы можете просто добавить не-близко класс к любому диалогу, чтобы скрыть это кнопка закрытия:

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

Ницца .... Работает. – MarcoZen

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

Вы должны иметь возможность использовать прямой CSS здесь вместо JS, если вы только скрываете значок. Все '.hide()' does устанавливается 'display: none' в CSS, поэтому' $ (". Ui-button-icon-only"). Hide(); 'функционально эквивалентно' .ui-button-icon -одно {display: none; } '. – KyleMit

2
document.querySelector('.ui-dialog-titlebar-close').style.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(); 
0

Так как я обнаружил, что я делал это в нескольких местах в моем приложении, я завернул его в плагин:

(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(); 
Смежные вопросы