jQuery UI 模态对话框:不显示按钮图标
jQuery UI modal dialog: button icons do not appear
我的模态对话框工作完美(意味着我可以调整每个选项),除了按钮图标选项没有效果。这是我用来生成对话框的代码:
$('#alert_div')
.attr("title", "Delete all instances?")
.text("Are you sure you want to delete all instances of this event between the specificed dates? This cannot be undone.")
.dialog({
modal: true,
draggable: false,
position: { my: "top", at: "center", of: window },
buttons: [
{
text: "No",
icons: { primary: "ui-icon-check" },
click: function() {
$(this).dialog('close');
console.log('Clicked no.');
}
},
{
text: "Yes",
click: function () {
$(this).dialog('close');
console.log('Clicked yes');
}
}
]
});
我查看了所有我能找到的相关 Stack Overflow 问题——例如this one。除了在打开时将一个元素附加到按钮之外,我不知道如何解决这个问题。当我在文档的其他地方创建元素并为它们提供正确的 class 时,图标会正确显示。
这是打开对话框时为按钮生成的 HTML jQuery:
<div class="ui-dialog-buttonset"><button type="button" icons="[object Object]" class="ui-button ui-corner-all ui-widget">OK</button></div>
我假设除了'[object Object]
在图标属性中。为什么会这样?我使用的是 jQuery UI v. 1.12.0 和 jQuery v. 3.0.0.,我没有使用 Bootstrap.
显然,问题是 jquery-ui 1.12.0 中的错误。如果您在 fiddle 中用 1.11.4 替换 1.12.0,问题就会消失。
我在我自己的测试环境中 运行 你的代码(你上面发布的代码,不是你 fiddle 中的代码),一切正常。 (我在 5 月份下载了 1.11.4,当时它是最新的稳定版本。)似乎在调用 dialog()
时没有调用 button()
方法。正如您正确推测的那样,icons
元素中不应有 object Object
。我的按钮代码如下所示:
<button type="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-icons" role="button">
<span class="ui-button-icon-primary ui-icon ui-icon-check"></span>
<span class="ui-button-text">No</span>
<span class="ui-button-icon-secondary ui-icon ui-icon-circle-check"></span>
</button>
看起来这可能是 jQuery-UI 1.12.0 中的 "real genuine bug"。 :)
编辑:看起来这实际上是 jQuery-UI 1.12.0 中的 "real genuine feature",以及许多其他更改,其中一些更改与以前版本的兼容性中断.参见 Harpo 的 "new syntax" link。任何使用菜单(特别是菜单,旧的将不再起作用)、radiobuttons/checkboxes 或其他一些东西的人都会想阅读它。
至于在一个按钮上得到两个图标,用新的语法还是可以的,但是你不能用dialog()
方法中的buttons
参数来实现。相反,您必须以标准方式制作按钮,为图标添加跨度。 (升级文档说您可以将第二个图标范围放在标记中,并使用 icon
参数作为曾经是主要图标的参数,但我无法让它在这种情况下工作.) 所以,对于标记:
<div id="alert_div">
<button id="okButton">
<span class="ui-icon ui-icon-check"></span>
Ok
<span class="ui-icon ui-icon-circle-check"></span>
</button>
</div>
然后:
$('#alert_div').dialog({
open: function(e, ui) {
$('#okButton')
.button()
.on('click', function() {
$(this).dialog('close');
});
}
});
jQuery UI 1.12 引入了一个 new syntax for button icons, which I have confirmed fixes this problem (see this jsFiddle). Currently, it doesn't accept the deprecated options; a PR has been submitted to fix that. See my bug report 以获取详细信息。以下代码适用于 jQuery UI 1.12 和 jQuery 3.1.0:
$("#alert_div")
.attr("title", "Error")
.text("Please choose a calendar and enter both start and end dates.")
.dialog({
modal: true,
draggable: false,
resizable: false,
position: { my: "top", at: "top", of: window },
buttons: [{
text: "OK",
icon: "ui-icon-check",
click: function() {
$(this).dialog("close");
}
}]
});
请看看这是示例,我们可以对它做任何事情..
使用样式对其进行更改...
谢谢...:)
我的模态对话框工作完美(意味着我可以调整每个选项),除了按钮图标选项没有效果。这是我用来生成对话框的代码:
$('#alert_div')
.attr("title", "Delete all instances?")
.text("Are you sure you want to delete all instances of this event between the specificed dates? This cannot be undone.")
.dialog({
modal: true,
draggable: false,
position: { my: "top", at: "center", of: window },
buttons: [
{
text: "No",
icons: { primary: "ui-icon-check" },
click: function() {
$(this).dialog('close');
console.log('Clicked no.');
}
},
{
text: "Yes",
click: function () {
$(this).dialog('close');
console.log('Clicked yes');
}
}
]
});
我查看了所有我能找到的相关 Stack Overflow 问题——例如this one。除了在打开时将一个元素附加到按钮之外,我不知道如何解决这个问题。当我在文档的其他地方创建元素并为它们提供正确的 class 时,图标会正确显示。
这是打开对话框时为按钮生成的 HTML jQuery:
<div class="ui-dialog-buttonset"><button type="button" icons="[object Object]" class="ui-button ui-corner-all ui-widget">OK</button></div>
我假设除了'[object Object] 在图标属性中。为什么会这样?我使用的是 jQuery UI v. 1.12.0 和 jQuery v. 3.0.0.,我没有使用 Bootstrap.
显然,问题是 jquery-ui 1.12.0 中的错误。如果您在 fiddle 中用 1.11.4 替换 1.12.0,问题就会消失。
我在我自己的测试环境中 运行 你的代码(你上面发布的代码,不是你 fiddle 中的代码),一切正常。 (我在 5 月份下载了 1.11.4,当时它是最新的稳定版本。)似乎在调用 dialog()
时没有调用 button()
方法。正如您正确推测的那样,icons
元素中不应有 object Object
。我的按钮代码如下所示:
<button type="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-icons" role="button">
<span class="ui-button-icon-primary ui-icon ui-icon-check"></span>
<span class="ui-button-text">No</span>
<span class="ui-button-icon-secondary ui-icon ui-icon-circle-check"></span>
</button>
看起来这可能是 jQuery-UI 1.12.0 中的 "real genuine bug"。 :)
编辑:看起来这实际上是 jQuery-UI 1.12.0 中的 "real genuine feature",以及许多其他更改,其中一些更改与以前版本的兼容性中断.参见 Harpo 的 "new syntax" link。任何使用菜单(特别是菜单,旧的将不再起作用)、radiobuttons/checkboxes 或其他一些东西的人都会想阅读它。
至于在一个按钮上得到两个图标,用新的语法还是可以的,但是你不能用dialog()
方法中的buttons
参数来实现。相反,您必须以标准方式制作按钮,为图标添加跨度。 (升级文档说您可以将第二个图标范围放在标记中,并使用 icon
参数作为曾经是主要图标的参数,但我无法让它在这种情况下工作.) 所以,对于标记:
<div id="alert_div">
<button id="okButton">
<span class="ui-icon ui-icon-check"></span>
Ok
<span class="ui-icon ui-icon-circle-check"></span>
</button>
</div>
然后:
$('#alert_div').dialog({
open: function(e, ui) {
$('#okButton')
.button()
.on('click', function() {
$(this).dialog('close');
});
}
});
jQuery UI 1.12 引入了一个 new syntax for button icons, which I have confirmed fixes this problem (see this jsFiddle). Currently, it doesn't accept the deprecated options; a PR has been submitted to fix that. See my bug report 以获取详细信息。以下代码适用于 jQuery UI 1.12 和 jQuery 3.1.0:
$("#alert_div")
.attr("title", "Error")
.text("Please choose a calendar and enter both start and end dates.")
.dialog({
modal: true,
draggable: false,
resizable: false,
position: { my: "top", at: "top", of: window },
buttons: [{
text: "OK",
icon: "ui-icon-check",
click: function() {
$(this).dialog("close");
}
}]
});
请看看这是示例,我们可以对它做任何事情..
使用样式对其进行更改...
谢谢...:)