[英]Is it possible to simulate button clicks or specify default OK & Cancel action handlers in jQuery UI Dialog?
我面对这个问题,但我不知道该如何解决。 我在这里找到了一些类似的解决方案,但我都不需要这些解决方案。 假设我有一些代码可以对一键式jQuery UI对话框进行简单的包装。 在这种情况下,一切都很简单:
$parent.keypress(function(e) {
switch ( e.keyCode ) {
case 13:
case 27:
$parent.unbind("keypress");
$plugin.dialog("destroy");
break;
}
});
因为我这里有唯一的按钮。 但是如果我有两个甚至更多个按钮怎么办? 我以为有类似$parent.dialog(...)
或类似$parent.trigger("__keypress__", "__button__name__")
-我在jQuery UI Dialog API中找不到类似的东西。 有什么解决方法吗?
感谢大家的建议。
更新:
PS我发现了一个粗略的解决方案:
var $parent = $dialog.parent();
$parent.keypress(function(e) {
switch ( e.keyCode ) {
case 13:
$parent.find(".ui-dialog-buttonpane button:contains('OK')").click();
break;
case 27:
$parent.find(".ui-dialog-buttonpane button:contains('Cancel')").click();
break;
default:
return;
}
$parent.unbind("keypress");
$plugin.dialog("destroy");
});
但这会更简单吗? 我当前的解决方案需要大量代码更改。
$(function(){$(“#dialog”)。dialog(“ destroy”);
$("#dialog-confirm").dialog({
resizable: false,
height:140,
modal: true,
buttons: {
'Delete all items': function() {
//Delete some stuff
$(this).dialog('close');
},
Cancel: function() {
$(this).dialog('close');
}
}
});
});
我没有很多时间,我已经进行了一些工作。 不知道它是否好,但是它似乎有用但粗糙。
$.fn.bindShortcuts = function(shortcuts) {
var $this = $(this);
var $parent = $this.parent();
var isByMouse = false;
$parent.bind("keypress.shortcuts", function(e) {
var caption = shortcuts[e.keyCode];
if ( caption ) {
var button = $parent.find(".ui-dialog-buttonpane button:contains('" + caption + "')");
if ( button.length && !isByMouse ) {
button.click();
$parent.unbind("keypress.shortcuts");
}
}
});
$parent.find(".ui-dialog-buttonpane button").click(function() {
isByMouse = true;
$parent.unbind("keypress.shortcuts");
});
return $this;
};
$.fn.bindOkCancel = function(ok, cancel) {
return $(this).bindShortcuts({
13: ok,
27: cancel
});
}
以及如何使用它:
dialog = $dialog.dialog({
buttons: {
"Cancel": $.noop,
"Export": $.noop
}
}).bindOkCancel("Export", "Cancel");
:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.