繁体   English   中英

是否可以模拟按钮点击或在jQuery UI对话框中指定默认的OK和Cancel操作处理程序?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM