jQuery UI对话框按钮图标

时间:2010-03-26 17:51:31

标签: jquery jquery-ui jquery-ui-dialog

是否可以在jQuery UI对话框的按钮上添加图标?我试过这样做:

$("#DeleteDialog").dialog({
    resizable: false,
    height:150,
    modal: true,
    buttons: {
        'Delete': function() {
            /* Do stuff */
            $(this).dialog('close');
        },
        Cancel: function() {
            $(this).dialog('close');
        }
    },
    open: function() {
        $('.ui-dialog-buttonpane').find('button:contains("Cancel")').addClass('ui-icon-cancel');
        $('.ui-dialog-buttonpane').find('button:contains("Delete")').addClass('ui-icon-trash');
    }
});

open函数中的选择器似乎工作正常。如果我将以下内容添加到“打开”:

$('.ui-dialog-buttonpane').find('button:contains("Delete")').css('color', 'red');

然后我会得到一个带红色文字的删除按钮。这还不错,但我真的很喜欢那个小垃圾也可以在删除按钮上进行精灵处理。

编辑:

我对接受的答案进行了一些调整:

var btnDelete = $('.ui-dialog-buttonpane').find('button:contains("Delete")');
btnDelete.prepend('<span style="float:left; margin-top: 5px;" class="ui-icon ui-icon-trash"></span>');
btnDelete.width(btnDelete.width() + 25);

添加一些上边距会将图标向下推,因此它看起来像是垂直居中。将25像素添加到按钮的宽度可使按钮文本不会换行到第二行。

13 个答案:

答案 0 :(得分:52)

我试过这个,它有效:)

[....]
open: function() {
                $('.ui-dialog-buttonpane').
                    find('button:contains("Cancel")').button({
                    icons: {
                        primary: 'ui-icon-cancel'
                    }
                });
[....]

答案 1 :(得分:34)

自jQuery UI 1.10以来本机支持

从jQuery UI版本1.10.0开始,可以干净地指定按钮图标,而无需使用open事件处理程序。语法是:

buttons: [
    {
        text: "OK",
        icons: { primary: "ui-icon-check" }
    },
    {
        text: "Cancel",
        icons: { primary: "ui-icon-closethick" }
    }
]

也可以指定secondary图标。

<强> See it in action

答案 2 :(得分:18)

尝试使用此行将垃圾桶图标添加到删除按钮。精灵必须在一个单独的元素中。

$('.ui-dialog-buttonpane').find('button:contains("Delete")').prepend('<span style="float:left;" class="ui-icon ui-icon-trash"></span>');

为了防止图标出现在按钮顶部:

$('.ui-dialog-buttonpane')
    .find('button:contains("Delete")')
    .removeClass('ui-button-text-only')
    .addClass('ui-button-text-icon-primary')
    .prepend('<span class="ui-icon ui-icon-trash"></span>');

答案 3 :(得分:8)

你也可以在按钮中添加id或其他attr,如下所示:

buttons:[
            {
                text: "Close",
                id: "closebtn",
                click: function() { $(this).dialog("close"); }
            }
        ],
open: function() {
            $("#closebtn").button({ icons: { primary: "ui-icon-close" } });
        }

答案 4 :(得分:6)

此版本无需担心按钮中的文本

open: function() {
    $(this).parent().find('.ui-dialog-buttonpane button:first-child').button({
        icons: { primary: 'ui-icon-circle-close' }
    });
    $(this).parent().find('.ui-dialog-buttonpane button:first-child').next().button({
        icons: { primary: 'ui-icon-circle-check' }
    });
}

答案 5 :(得分:2)

这是我使用的。在初始对话框定义期间为感兴趣的按钮分配ID:

    buttons:
    [
        {
            id: "canxButton",
            text: "Cancel",
            icons: {
                primary: "ui-icon-cancel"
            },
            click: function () { ...

然后你可以改变这样的文字/图标:

$("#canxButton").button("option", "label", "Done");
$("#canxButton").button({ icons: {primary: "ui-icon-close"} });

答案 6 :(得分:1)

将高度分配给“.ui-dialog .ui-button”,如下所示:

.ui-dialog .ui-button {
    height:36px;
}
.ui-icon-kl_exit {
    height:32px; 
    width:32px;
    display:block;
    background-image: url('../icons/exit32.ico');
}

答案 7 :(得分:1)

只是一个更新,因为我自己需要这样做。

我有多个对话框,它们都有相同的关闭按钮,因此讨论如何将图标直接放在您想要影响的对话框上是有用的,以防万一你想要一个不同的按钮上的图标包含相同文本的对话框。

此外,所选解决方案实际上缺少一些已定义的CSS类,可以解决位置问题。

以下代码应该完全符合原始问题的要求,并且更加精确。如果您想使用“删除”按钮将相同的垃圾桶图标应用于所有对话框,则将$('#DeleteDialog')。parent()选择器更改为$('。ui-dialog-buttonpane')将实现该目标:

$('#DeleteDialog').parent()
    .find('button:contains("Delete")')
    .removeClass('ui-button-text-only')
    .addClass('ui-button-text-icon-primary ui-button-text-icon')
    .prepend('<span class="ui-button-icon-primary ui-icon ui-icon-trash"></span>');

答案 8 :(得分:1)

或者,如果您不想影响任何其他对话框,

open: function() {
    $(this).parent().find('.ui-dialog-buttonpane button:contains("Cancel")').button({
        icons: { primary: 'ui-icon-circle-close' }
    });
    $(this).parent().find('.ui-dialog-buttonpane button:contains("Ok")').button({
        icons: { primary: 'ui-icon-circle-check' }
    });
}

答案 9 :(得分:1)

我遇到了同样的问题。似乎jquery将文本存储在按钮本身的名为“text”的属性中,而不是按钮内的文本。

我解决了这个问题:

    $dialog.dialog({
        resizable:false,
        draggable:false,
        modal:true,
        open:function (event, ui) {
            $(this).parents('.ui-dialog').find('.cancel.ui-button').text('Cancel');
            //or you could use: $(this).parents('.ui-dialog').find('button[text="Cancel"]').text('Cancel');
            $(this).parents('.ui-dialog').find('.add.ui-button').text('OK');
        },
        buttons:[
            {
                text:"OK",
                click:function () {

                },
                "class":"add"
            },
            {
                text:"Cancel",
                click:function () {

                },
                "class":"cancel"
            }
        ]
    });

答案 10 :(得分:1)

基于班级的方法怎么样?

_layout.cshtml文件中输入如下内容:

<script type="text/javascript">
    $(function () {
        stylizeButtons();
    }

function stylizeButtons(parent) {
    if (parent == undefined) {
        parent = $("body");
    }
    // Buttons with icons
    $(parent).find(".my-button-add").button({ icons: { primary: "ui-icon-plusthick"} });
    $(parent).find(".my-button-cancel").button({ icons: { primary: "ui-icon-closethick"} });
    $(parent).find(".my-button-delete").button({ icons: { primary: "ui-icon-closethick"} });
    $(parent).find(".my-button-submit").button({ icons: { primary: "ui-icon-check"} });
    $(parent).find(".my-button-export").button({ icons: { primary: "ui-icon-suitcase"} });
    $(parent).find(".my-button-search").button({ icons: { primary: "ui-icon-search"} });
    $(parent).find(".my-button-editicon").button({ icons: { primary: "ui-icon-pencil"} });
    $(parent).find(".my-button-edit").button({ icons: { primary: "ui-icon-pencil"} });
    $(parent).find(".my-button-back").button({ icons: { primary: "ui-icon-arrowthick-1-w"} });
    $(parent).find(".my-button-previous").button({ icons: { primary: "ui-icon-carat-1-w"} });
    $(parent).find(".my-button-next").button({ icons: { primary: "ui-icon-carat-1-e"} });
    $(parent).find(".my-button-history").button({ icons: { primary: "ui-icon-bookmark"} });
    $(parent).find(".my-button-reports").button({ icons: { primary: "ui-icon-calculator"} });
}
</script>

然后,在创建对话框的文件中,执行以下操作:

$("#doStuff-dialog").dialog({
    title: "Do Some Stuff",
    modal: true,
    buttons: [
        {
            text: "Yes",
            class: "my-button-submit",
            click: function () {
                $(this).dialog("close");
            }
        },
        {
            text: "No",
            class: "my-button-cancel",
            click: function () {
                $(this).dialog("close");
            }
        }
    ],
    open: function () {
        stylizeButtons($("#doStuff-dialog").parent());
    }
});

然后您永远不必依赖于搜索文本,并且在对话框中需要最少量的代码。我在我的应用程序中使用它来将jquery UI样式/图标应用于按钮,只需给它们一个类。

答案 11 :(得分:1)

根据Dialog > buttons option文档,您可以传递一个对象或一组选项;后者允许您自定义按钮:

  

按钮

     

输入:对象或数组
  默认: []

     

支持多种类型:

     
      
  • 对象:键是按钮标签,值是单击关联按钮时的回调。
  •   
  • 数组:数组的每个元素必须是一个对象,用于定义要在按钮上设置的属性,属性和事件处理程序。在   此外,icons的键可用于控制按钮的图标   选项,showText的键可用于控制按钮的文本   选项。
  •   

&#13;
&#13;
$(function() {
  var buttons = [];
  buttons.push({
    text: "Yes",
    // icon options
    icons: { primary: "ui-icon-check" },
    // attributes
    "class": "hawt-button",
    title: "Aye!"
  });
  buttons.push({
    text: "Yes to All",
    icons: { secondary: "ui-icon-check" }
  });
  buttons.push({
    text: "Please",
    icons: { primary: "ui-icon-notice" },
    // text options
    showText: false
  });
  buttons.push({
    text: "Cancel",
    icons: { secondary: "ui-icon-close" },
    // properties
    disabled: true
  });
  $("#dialog").dialog({
    width: "auto",
    buttons: buttons
  });
});
&#13;
@import url("https://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.min.css");

.ui-button.hawt-button {
  color: hotpink;
}
&#13;
<script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>

<div id="dialog" title="Confirmation">
  <p>Delete all files from your hard drive?</p>
</div>
&#13;
&#13;
&#13;

答案 12 :(得分:0)

在打开方法上添加这样的自定义图标:

0xFF

“far fa-window-close”是引导程序很棒的图标