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

Xio*_*ark 175 javascript jquery-ui imagebutton jquery-ui-dialog

我正在使用自定义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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

编辑:代码的不同部分是由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);
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

我很茫然,需要帮助.提前致谢.

Dav*_*d G 420

我迟到了这一点,但是我会打扰你的心,准备好了吗?

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

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

<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<script src="js/bootstrap.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

它成为了

<script src="js/bootstrap.min.js"></script>
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
Run Code Online (Sandbox Code Playgroud)

:)

编辑 - 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();`http://stackoverflow.com/a/四十零万二千五百十七分之二千三百四十二万八千四百三十三 (17认同)
  • 这解决了我的问题.我按顺序包含了资源:1)JQuery核心2)bootstrap 3)JQueryUI.谢谢你的帮助; 迟到总比不到好!PS - 你确实让我大吃一惊. (7认同)
  • 甚至更晚......你能解释一下为什么bootstrap订购与它有关吗? (6认同)
  • 如果您在Jquery UI之前交换订单Bootstrap,则Bootstrap工具提示将不起作用. (4认同)
  • 虽然这实际上不是一个好的解决方案,但我赞成它,因为它提供了一种快速验证这是问题的方法.我个人最终将使用Raul Riveros的解决方案,因为简单地交换两个脚本会导致许多其他更大的问题.顺便说一下,当我看到它的时候,我有点心神不安. (4认同)
  • 优秀的是它让我头疼,但令人不安的是两个主要的图书馆如此容易相撞......这肯定预示着未来的悲痛. (2认同)
  • @DavidG你是对的!我几乎在每个场合都忽略了"ui"部分.谢谢你的澄清. (2认同)

Pre*_*ool 40

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

如果你想在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
Run Code Online (Sandbox Code Playgroud)


Kyl*_*Mit 21

这似乎是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>");
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 对于未来的读者,你可以[扩展ui.dialog(链接)](http://learn.jquery.com/jquery-ui/widget-factory/extending-widgets/),这样你就不必复制这个开放了每次通话都有功能. (8认同)
  • 这工作得相当好.X比正常情况稍微远一些......不确定为什么. (2认同)

小智 16

据报道,这在1.10中被打破

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

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

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


Eug*_*ski 13

我发现了三个修复:

  1. 你可以先加载bootsrap.他们加载jquery-ui.但这不是一个好主意.因为你会在控制台中看到错误.
  2. 这个:

    var bootstrapButton = $.fn.button.noConflict();
    $.fn.bootstrapBtn = bootstrapButton;
    
    Run Code Online (Sandbox Code Playgroud)

    帮助.但其他按钮看起来很糟糕.而现在我们没有自举按钮.

  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;
    }
    
    Run Code Online (Sandbox Code Playgroud)


小智 9

我有同样的问题,也许你已经破坏了这个,但只是把"images"文件夹放在与jquery-ui.css相同的位置就解决了

  • 实际上这是为我解决问题的反应,或者至少澄清了它.我有一个测试页面引用了jquery-ui.css的在线(即http://code.jquery.com/...)副本,在这种情况下,"X"出现了.但是在我的实际项目页面中,在本地css文件夹中有.css文件,"X"没有显示.将"images"文件夹复制到我的本地css文件夹,与我的.css文件一起,修复了该问题. (3认同)

Rau*_*ero 5

我遇到了同样的问题,在阅读并尝试了上述所有建议之后,我只是尝试在下载并保存到我的应用程序和image的images文件夹中后,在CSS中手动替换此图片(您可以在此处找到它),问题解决了!

这是CSS:

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