jQuery UI Dialog - отсутствует значок закрытия

153

Я использую пользовательскую тему jQuery 1.10.3. Я загрузил каждую прямую из тематического ролика, и я намеренно ничего не изменил.

Я создаю диалоговое окно, и я получаю пустой серый квадрат, где должна быть значка закрытия: Изображение 649

Я сравнил код, созданный на моей странице:

<div class="ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix">
    <spanid="ui-id-2" class="ui-dialog-title">Title</span>
    <button class="ui-dialog-titlebar-close"></button>
</div>

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

<div class="ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix">
    <span id="ui-id-1" class="ui-dialog-title">Basic dialog</span>
    <button class="ui-button ui-widget ui-state-default ui-corner-all ui-button-icon-only ui-dialog-titlebar-close" role="button" aria-disabled="false" title="close">
        <span class="ui-button-icon-primary ui-icon ui-icon-closethick"></span>
        <span class="ui-button-text">close</span>
    </button>
</div>

EDIT: Различные части кода сгенерированы с помощью jQueryUI, а не меня, поэтому я не могу просто добавить теги span без редактирования jqueryui js файла, который кажется плохим/ненужным выбором для достижения нормальной функциональности.

Здесь используется javascript, который генерирует эту часть кода:

this.element.dialog({
    appendTo: "#summary_container",
    title: this.title(),
    closeText: "Close",
    width: this.width,
    position: {
        my: "center top",
        at: ("center top+"+(window.innerHeight*.1)),
        collision: "none"
    },
    modal: false,
    resizable: false,
    draggable: false,
    show: "fold",
    hide: "fold",
    close: function(){
        if(KOVM.areaSummary.isVisible()){
            KOVM.areaSummary.isVisible(false);
        }
    }
});

Я в недоумении и нуждаюсь в помощи. Спасибо заранее.

  • 0
    Вы проверили, существует ли файл изображения для значка в вашей файловой системе?
  • 0
    Да, лист с изображением значка существует и находится в правильном месте.
Теги:
imagebutton
jquery-ui-dialog

14 ответов

333
Лучший ответ

Я опоздал на это, но я собираюсь взорвать свой ум, готов?

Причина, по которой это происходит, заключается в том, что вы вызываете bootstrap внутри, после того как вы вызываете jquery-ui in.

Буквально замените два так, чтобы вместо:

<script src="/jquery-ui.js"></script>
<script src="/bootstrap.min.js"></script>

он становится

<script src="/bootstrap.min.js"></script>
<script src="/jquery-ui.js"></script>

:)

Изменить - 26/06/2015 - это продолжает привлекать интерес через несколько месяцев, поэтому я подумал, что стоит изменить. Мне действительно очень нравится noConflict решение, предложенное в комментарии под этим ответом и разъясненное пользователем Pretty Cool в качестве отдельного ответа. Поскольку некоторые из них сообщали о проблемах с помощью всплывающей подсказки для начальной загрузки при смене сценариев. Я не опыт, который возникает, однако, поскольку я загрузил пользовательский интерфейс jquery без всплывающая подсказка, поскольку мне это не нужно, потому что бутстрап. Так что этот вопрос никогда подошел ко мне.

Изменить - 22/07/2015 - Не путайте jquery-ui с помощью jquery! В то время как Bootstrap JavaScript требует, чтобы jQuery загружался раньше, он не полагается на jQuery-UI. Поэтому jquery-ui.js может быть загружен после bootstrap.min.js, а jquery.js всегда нужно загружать перед загрузкой.

  • 7
    Это исправило мою проблему. Я включил ресурсы в следующем порядке: 1) ядро JQuery 2) загрузчик 3) JQueryUI. Спасибо за вашу помощь; лучше поздно, чем никогда! PS - вы взорвали меня.
  • 6
    Даже позже ... Можете ли вы объяснить, ПОЧЕМУ порядок загрузки бутстрапа имеет к этому отношение?
Показать ещё 20 комментариев
26

Это комментарий к верхнему ответу, но я чувствовал, что это стоит собственного ответа, потому что это помогло мне ответить на проблему.

Если вы хотите сохранить Bootstrap, объявленный после пользовательского интерфейса JQuery (я сделал это, потому что я хотел использовать всплывающую подсказку Bootstrap), объявление следующего (я объявлял его после $(document).ready), чтобы кнопка снова появлялась (ответ от https://stackoverflow.com/questions/23428285/bootstrap-and-jqueryui-conflict)

var bootstrapButton = $.fn.button.noConflict() // return $.fn.button to previously assigned value
$.fn.bootstrapBtn = bootstrapButton            // give $().bootstrapBtn the Bootstrap functionality
  • 0
    Это довольно приятный способ сделать что-то, не мешая звонкам. +1 за то же самое.
  • 0
    Это красиво и работает как шарм!
Показать ещё 3 комментария
19

Это, кажется, ошибка в способе доставки jQuery. Вы можете исправить его вручную с помощью некоторых манипуляций с dom на событии Dialog Open:

$("#selector").dialog({
    open: function() {
        $(this).closest(".ui-dialog")
        .find(".ui-dialog-titlebar-close")
        .removeClass("ui-dialog-titlebar-close")
        .html("<span class='ui-button-icon-primary ui-icon ui-icon-closethick'></span>");
    }
});
  • 8
    К сведению будущих читателей, вы можете расширить ui.dialog (ссылка), чтобы вам не приходилось дублировать эту открытую функциональность при каждом вызове.
  • 2
    Это сработало довольно хорошо. Икс был немного дальше, чем обычно, хотя ... не знаю точно, почему.
Показать ещё 1 комментарий
15

Об этом сообщается как сломанном в 1.10

http://blog.jqueryui.com/2013/01/jquery-ui-1-10-0/

phillip 29 января 2013 года в 7:36 сказал: "В версиях CDN кнопка закрытия диалогового окна отсутствует. Theres только тег кнопки, диапазон ui-icon - missong.

Я загрузил предыдущую версию, и кнопка X для закрытия отобразится.

  • 0
    Я использую 1.10.3, но, по крайней мере, теперь я чувствую себя менее сумасшедшим. Я решил просто игнорировать это сейчас. Благодарю.
  • 0
    Я могу подтвердить, что это все еще проблема в 1.10.3
Показать ещё 1 комментарий
8

Я нашел три исправления:

  • Вы можете сначала загрузить загрузку. И они загружают jquery-ui. Но это не очень хорошая идея. Потому что вы увидите ошибки в консоли.
  • Это:

    var bootstrapButton = $.fn.button.noConflict();
    $.fn.bootstrapBtn = bootstrapButton;
    

    помогает. Но другие кнопки выглядят ужасно. И теперь у нас нет кнопок начальной загрузки.

  • Я просто хочу использовать стили bootsrap, а также хочу, чтобы кнопка закрытия со значком. Я сделал следующее:

    Как закрыть кнопку закрытия после исправления

    .ui-dialog-titlebar-close {
        padding:0 !important;
    }
    
    .ui-dialog-titlebar-close:after {
        content: '';
        width: 20px;
        height: 20px;
        display: inline-block;
        /* Change path to image*/
        background-image: url(themes/base/images/ui-icons_777777_256x240.png);
        background-position: -96px -128px;
        background-repeat: no-repeat;
    }
    
  • 0
    Отлично! Если у вас нет установленного файла изображения или какой-либо конкретной темы, вы можете получить его здесь: jqueryui.com/themeroller . Скачайте тему и выберите нужные компоненты (в данном случае диалог). Затем загрузите, распакуйте, откройте папку темы или изображения и скопируйте файл изображения, соответствующий вашей теме, в ваш проект. Затем измените ссылку на CSS, предоставленную Yauheni в своем ответе.
  • 0
    Ваш пункт 3 решил проблему для меня. Мне просто нужно немного изменить ширину, высоту и положение фона, чтобы кнопка выглядела так, как я хотел. Спасибо.
7

У меня была такая же точная проблема. Возможно, вы уже сделали это, но решили ее, просто разместив папку "images" в том же месте, что и jquery-ui.css

  • 3
    На самом деле это ответ, который решил проблему для меня, или, по крайней мере, прояснил ее. У меня была тестовая страница, которая ссылалась на онлайн (то есть, code.jquery.com / ... ) копию jquery-ui.css, и в этом случае появился «X». Однако на моей реальной странице проекта, в которой файл .css находился в локальной папке css, «X» не показывался. Копирование папки «images» в мою локальную папку css, наряду с моим файлом .css, решило проблему.
4

Я застрял с той же проблемой, и после прочтения и попробовал все предложения выше, я просто попытался заменить вручную это изображение (которое вы можете найти здесь) в CSS после его загрузки и сохранения в папке с изображениями в моем приложении и voilá, проблема решена!

вот CSS:

.ui-state-default .ui-icon { background-image: url("../img/ui-icons_888888_256x240.png"); }

2

Я использую jQuery UI 1.8.17, и у меня была эта же проблема, плюс у меня были дополнительные стили CSS, которые применяются к вещам на странице, включая названиеbar цвет. Поэтому, чтобы избежать других проблем, я нацелился на точные элементы ui, используя следующий код:

$("#mydialog").dialog('widget').find(".ui-dialog-titlebar-close").hide();    
$("#mydialog").dialog('widget').find('.ui-icon ui-icon-closethick').hide();

Затем я добавил кнопку закрытия в свойствах самого диалога: ...

modal : true,
title: "My Dialog",
buttons: [{text: "Close", click: function() {$(this).dialog("close")}}],
...

По какой-то причине я должен был нацелить оба элемента, но он работает!

1

Я знаю, что этот вопрос старый, но у меня была эта проблема с jquery-ui v1.12.0.

Короткий ответ Убедитесь, что у вас есть папка с именем Images в в том же месте, у вас есть jquery-ui.min.css. Папка изображений должна содержать изображения, найденные при новой загрузке jquery-ui

Длинный ответ

Моя проблема в том, что я использую gulp для слияния всех моих файлов css в один файл. Когда я это делаю, я меняю местоположение jquery-ui.min.css. Код css для диалога ожидает папку с именем Images в том же каталоге, и внутри этой папки он ожидает значки по умолчанию. поскольку gulp не копировал изображения в новый пункт назначения, он не показывал значок x.

1

Помог мне мудрый человек.

В папке ...\css, где находится файл jquery-ui.css, создайте папку "images" и скопируйте в нее файлы:

щ-icons_444444_256x240.png

щ-icons_555555_256x240.png

щ-icons_777620_256x240.png

щ-icons_777777_256x240.png

щ-icons_cc0000_256x240.png

щ-icons_ffffff_256x240.png

и появится значок закрытия.

1
  just add in css
 .ui-icon-closethick{
 margin-top: -8px!important;
margin-left: -8px!important;

}

1

В качестве справочника, таким образом, я расширил открытый метод в соответствии с предложением @john-macintyre:

$.widget( "ui.dialog", $.ui.dialog, {
	open: function() {
		$(this.uiDialogTitlebarClose)
			.html("<span class='ui-button-icon-primary ui-icon ui-icon-closethick'></span><span class='ui-button-text'>close</span>");
		// Invoke the parent widget open().
		return this._super();
	}
});
0

У меня тоже есть эта проблема. Вот код, который вставлен для кнопки закрытия:

Изображение 7734

Когда я выключаю кнопку style = "display: none:" на кнопке, появляется кнопка закрытия. Поэтому по какой-то причине это отображение: none; становится установленным, и я не вижу, как это контролировать. Таким образом, еще один способ решения этой проблемы - просто переопределить отображение: none. Не смотрите, как это сделать.

Я отмечаю, что ответ, опубликованный KyleMit, работает, но делает другую кнопку X.

Я также отмечаю, что эта проблема не влияет на все диалоги на моих страницах, а только на некоторые из них. Некоторые диалоги работают так, как ожидалось; другие не имеют названия (т.е. пробел, содержащий заголовок пуст), в то время как кнопка закрытия присутствует.

Я думаю, что что-то серьезно не так, и это может быть не время для 1.10.x.

Но после дальнейшей работы я обнаружил, что в некоторых случаях заголовки не устанавливались должным образом, и после исправления этого кнопка закрытия X снова появилась, как и должно быть.

Я использовал такие заголовки, как это:

('#ui-dialog-title-ac-popup').text('Add Admin Comments for #' + $ac_userid);

Этот id не существует в моем коде, но создается, по-видимому, jquery из ac-popup и ui-dialog-title. Вид клочья. Но поскольку я сказал, что больше не работает, и я должен использовать вместо этого следующее:

$('.ui-dialog-title').text('Add Admin Comments for #' + $ac_userid);

После этого проблема с отсутствующей кнопкой кажется лучше, хотя я не уверен, что они определенно связаны.

0

Просто добавьте недостающие:

<span class="ui-button-icon-primary ui-icon ui-icon-closethick"></span>
<span class="ui-button-text">close</span>
  • 3
    Я не могу Я не создаю эту часть HTML, JQuery делает. Я добавил больше информации в свой вопрос, чтобы прояснить этот момент.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню