Діалогове вікно інтерфейсу jquery: як ініціалізуватись без заголовка?


254

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

Відповіді:


289

Я думаю, що найкраще рішення - використовувати варіант dialogClass.

Витяг із документів інтерфейсу jquery:

під час init: $('.selector').dialog({ dialogClass: 'noTitleStuff' });

або якщо ви хочете після init. :

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

Тож я створив деякий діалог із опцією dialogClass = 'noTitleStuff' та таким css:

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

занадто просто !! але мені знадобився 1 день, щоб подумати, чому мій попередній метод буріння id-> не працював. Насправді, коли ви називаєте .dialog()метод діва, ви перетворюєтесь на дитину іншого діва (справжнього діалогового диві) та, можливо, «брата» titlebarдіва, тому дуже важко спробувати знайти останнього, починаючи з першого.


2
+1 Рішення Jonatan не працює для конкретного діалогу. Ваші справи.
cetnar

1
Я згоден з мізаром. Це найкраще рішення через те, що це дозволяє вам конкретизувати ті діалогові вікна, які мають лише той клас, який ви визначили.
Карлос Пінто,

2
Єдиним недоліком цього методу є те, що Chrome додає вертикальну смугу прокрутки для такого діалогового вікна, коли він налаштований як модальний, тому що якось jQuery починає неправильно обчислювати висоту накладання uid-widget-overlay ... Я не копав глибше, і не робив не знайдеш швидкого виправлення, окрім хакі {overflow: hidden}
dimsuz

1
dialogClass застарілий у jquery v 1.12 і не впливає на об'єкт діалогу за призначенням.
Міні-холодильник

1
Параметр dialogClass застарілий на користь параметра класів, використовуючи властивість ui-dialog.
Sandeep Saroha

96

Я вигадав виправлення для динамічного видалення заголовка.

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

Після видалення діалогового вікна всі елементи за допомогою класу 'ui-dialog-title-панелі' буде видалено.


3
... і опція css видаляє всі шанси їх появи раніше. Я не впевнений, що бачу якусь користь у вашій альтернативі. Насправді ваша альтернатива збирається зробити те, що я зробила, лише додавши додатковий крок. Перехід CSS-маршруту буде швидше.
Сампсон

10
Ну а мій варіант видалить лише заголовок для цього діалогового вікна. Якби я використовував ваш варіант, я б видалив заголовок для всіх своїх діалогів. Я можу побачити в майбутньому, що мені знадобиться рядок заголовка.
Loony2nz

2
Таким чином , ви включаєте свій елемент всередині CSS-правила: #example .ui-dialog-titlebar.... Це буде працювати в будь-якому випадку; але Javascript збирається встановити css врешті-решт, тому я не бачу вигоди від того, щоб не зробити це в css для початку. Це насправді не має великої різниці - все, що вам найбільше подобається :)
Сампсон,

2
Це лише я або чи #example не має рамки над заголовком діалогу?
Ріо

2
Файли cookie @Rice Flour: .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

Якщо у вас є якась інша подія, яка викликає метод закриття діалогового вікна, то можуть бути випадки, коли вам не потрібна кнопка закриття на заголовку.
Карлос Пінто

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'); }); });
Адріан П.

$("#myDialog").dialog('open').siblings('.ui-dialog-titlebar').remove();найкраща відповідь на мій погляд +1 для цього рядка коду
Джейлен

Або ви можете просто шукати попередній брат, який є рядком заголовка: .ui-dialog-titlebar: $("#myDialog").prev().hide()або $("#myDialog").prev(".ui-dialog-titlebar").hide().
Андрій

Голосуй вгору, бо у мене є дві діви, і я хотів сховати лише одну.
Маркус Бекер

15

Це працювало для мене:

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

1
Це приховає заголовки у всіх діалогах. Моя пропозиція нижче (наступна відповідь) зробить це лише для діалогу, що відкривається в даний час.
інгредієнт_15939

Приємно ... Це означає, що я не повинен робити кожен діалог прихованим через базовий клас css ... також означає, що я не повинен встановлювати своє діалогове вікно окремо, а потім видаляти заголовок.
Gwasshoppa

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: function() { $(this).closest(".ui-dialog").find(".ui-dialog-titlebar:first").hide(); }

Простий.


2
Це метод, з яким я пішов, але використовував функцію create: так, щоб вона завжди була прихованою, а не лише тоді, коли показано діалогове вікно. Я також змінив його на .remove () замість .hide (), щоб переконатися, що він повністю вийшов із діалогового вікна.
Кріс Портер

4

Ви можете використовувати jquery, щоб приховати заголовок після використання dialogClass при ініціалізації діалогового вікна.

під час init:

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

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

Використовуючи цей метод, вам не потрібно змінювати файл css, і це теж динамічно.


1
Так, це рішення мізара - опубліковано за 6 місяців до вашого.
Кірк Волл

Я погоджуюся, але тоді вам доведеться додати запис 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 та додавання та встановлення css через jquery

ось для цього синтаксис

$(".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) та знайдіть це._createTitlebar (); і прокоментуйте це.

тепер будь-хто із вашого діалогового вікна з’явиться із заголовками. Якщо ви хочете налаштувати заголовок, просто перейдіть до _createTitlebar (); і відредагуйте код всередині.

від


Внесення таких модифікацій спричиняє страшні болі за оновлення.
usr
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.