代码之家  ›  专栏  ›  技术社区  ›  Lyubomyr Shaydariv

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

  •  0
  • Lyubomyr Shaydariv  · 技术社区  · 16 年前

    我面对这个问题,不知道怎么解决。我在这里找到了一些类似的解决方案,但没有一个是我需要的。比方说,我有一些代码可以在一个按钮jqueryui对话框周围做一个简单的包装。在这种情况下,一切都很简单:

    $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__") -我在jqueryui对话框API中没有发现任何类似的东西。有解决办法吗?

    谢谢大家的建议。

    更新:
    另外,我找到了一个粗略的解决办法:

        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");
        });
    

    但能不能更简单一点?我当前的解决方案需要大量的代码更改。

    2 回复  |  直到 16 年前
        1
  •  0
  •   Flakron Bytyqi    16 年前

    $(函数(){ $(“#dialog”).dialog(“销毁”);

        $("#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');
                }
            }
        });
    });
    
        2
  •  0
  •   Lyubomyr Shaydariv    16 年前

    我没有太多的时间,我已经实施了一些工作。不知道是否好,但似乎有用但粗糙。

    $.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");
    

    :)