jQuery UI 对话框 - 缺少关闭图标

IT技术 javascript jquery-ui jquery-ui-dialog imagebutton
2021-03-02 23:17:59

我正在使用自定义 jQuery 1.10.3 主题。我从主题滚轮直接下载了所有内容,并且我故意没有更改任何内容。

我创建了一个对话框,我得到一个空的灰色方块,关闭图标应该是: 缺少关闭图标的屏幕截图

我比较了在我的页面上生成的代码:

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

Dialog Demo 页面上生成的代码

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

编辑

代码的不同部分是由 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);
        }
    }
});

我不知所措,需要帮助。

6个回答

我迟到了一段时间,但我要让你大吃一惊,准备好了吗?

发生这种情况的原因是因为您在调用 jquery-ui 之后调用了 bootstrap。

从字面上看,交换两者,而不是:

<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<script src="js/bootstrap.min.js"></script>

它成为了

<script src="js/bootstrap.min.js"></script>
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>

:)

编辑 - 26/06/2015 - 几个月后这一直吸引着人们的兴趣,所以我认为值得编辑。我实际上非常喜欢此答案下方的评论中提供的 noConflict 解决方案,并由用户 Pretty Cool 作为单独的答案进行了澄清。因为有些人报告了交换脚本时引导程序工具提示的问题。但是我没有遇到这个问题,因为我下载了没有工具提示的 jquery UI,因为我不需要它,因为 bootstrap。所以这个问题从来没有出现在我身上。

编辑 - 22/07/2015 - 不要jquery-uijquery! 虽然 Bootstrap 的 JavaScript 需要事先加载 jQuery,但它不依赖于 jQuery-UI。所以jquery-ui.js可以在 之后加载bootstrap.min.js,而jquery.js总是需要在 Bootstrap 之前加载。

如果您不想更改 Bootstrap 和 jQuery UI 的顺序,您也可以修复按钮:$.fn.bootstrapBtn = $.fn.button.noConflict(); stackoverflow.com/a/23428433/402517
2021-04-18 23:17:59
甚至更晚......你能解释为什么引导程序排序与它有关吗?
2021-04-28 23:17:59
虽然这实际上不是一个好的解决方案,但我赞成它,因为它提供了一种快速的方法来验证这是问题所在。我个人最终会使用 Raul Riveros 的解决方案,因为简单地交换两个脚本会导致许多其他更大的问题。顺便说一句,当我看到它时,我有点震惊。
2021-05-01 23:17:59
如果在 Jquery UI 之前交换 Bootstrap 的顺序,则 Bootstrap 工具提示将不起作用。
2021-05-12 23:17:59
这解决了我的问题。我按以下顺序包含资源:1)JQuery 核心 2)引导程序 3)JQueryUI。谢谢你的帮助; 迟到总比不到好!PS - 你确实让我大吃一惊。
2021-05-15 23:17:59

这是对最佳答案的评论,但我觉得值得自己回答,因为它帮助我回答了问题。

如果您想在 JQuery UI 之后保持 Bootstrap 声明(我这样做是因为我想使用 Bootstrap 工具提示),声明以下(我在 之后声明$(document).ready)将允许按钮再次出现(来自https://stackoverflow.com/ a/23428433/4660870 )

var bootstrapButton = $.fn.button.noConflict() // return $.fn.button to previously assigned value
$.fn.bootstrapBtn = bootstrapButton            // give $().bootstrapBtn the Bootstrap functionality
这是一种非常巧妙的做事方式,而不会过多地打扰通话。+1 相同。
2021-04-16 23:17:59
这个解决方案的问题是这会破坏你想要使用引导按钮功能的代码,比如 button('loading')。为了确保现有的引导程序按钮功能仍然有效,请将引导程序“button()”函数调用的所有引用替换为“bootstrapBtn()”。(是的,我知道代码注释暗示了这一点,但我认为值得明确地说出来。)
2021-04-18 23:17:59
你的编辑没有抱怨缺少分号吗?
2021-04-22 23:17:59
干扰按钮类
2021-04-26 23:17:59

这似乎是 jQuery 发布方式中的一个错误。您可以通过对Dialog Open事件进行一些 dom 操作来手动修复它

$("#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>");
    }
});
这工作得相当好。尽管 X 比正常情况更靠左一点……但不知道究竟是为什么。
2021-04-25 23:17:59
太好了,我必须给你点赞。
2021-05-06 23:17:59
仅供未来的读者参考,您可以扩展 ui.dialog(链接),这样您就不必在每次调用中都重复此打开的功能。
2021-05-10 23:17:59
很棒的解决方案!但是,在我的情况下, removeClass(...) 是不必要的,并且导致对话框窗口左侧的 X 按钮错位。只需将 html() 方法链接到 find() 方法即可完成这项工作。谢谢你。
2021-05-13 23:17:59

我发现了三个修复:

  1. 您可以先加载引导程序。他们加载 jquery-ui。但这不是个好主意。因为您会在控制台中看到错误。
  2. 这:

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

    有帮助。但其他按钮看起来很糟糕。现在我们没有引导按钮。

  3. 我只想使用 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;
    }
    
你的第 3 点为我解决了这个问题。我只需要对宽度、高度和背景位置进行微调,以使按钮看起来像我想要的那样。谢谢你。
2021-05-05 23:17:59
太棒了!如果您没有安装图像文件或任何特定主题,您可以在此处获取:jqueryui.com/themeroller下载主题并选择您需要的组件(在本例中为对话框)。然后下载、解压、打开主题或图像文件夹并将与您的主题匹配的图像文件复制到您的项目中。然后更改 Yauheni 在他的回答中提供的 css 中的引用。
2021-05-09 23:17:59

这在 1.10 中报告为已损坏

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

philip 在 2013 年 1 月 29 日上午 7:36 说: 在 CDN 版本中,对话框关闭按钮丢失。只有按钮标签,span ui-icon 是missong。

我下载了以前的版本,关闭按钮的 X 显示备份。

我正在使用 1.10.3,但至少我现在感觉不那么疯狂了。我选择暂时忽略它。谢谢。
2021-05-01 23:17:59
1.12.1 中的相同问题
2021-05-04 23:17:59
我可以确认这仍然是 1.10.3 中的问题
2021-05-12 23:17:59