单击窗口外覆盖时如何关闭 Kendo UI 模态窗口?

Posted

技术标签:

【中文标题】单击窗口外覆盖时如何关闭 Kendo UI 模态窗口?【英文标题】:How to close KendoUI modal window when click on overlay outside window? 【发布时间】:2014-02-02 05:31:24 【问题描述】:

我打开了 Kendo UI 模式窗口,我想通过单击覆盖来关闭它。我该怎么做?

【问题讨论】:

【参考方案1】:

试试这样的:

var dialog = $("#dialog2").kendoWindow(
    modal: true
).data("kendoWindow").center();

$(document).on("click", ".k-overlay", function () 
    dialog.close();
);

(demo)

【讨论】:

【参考方案2】:

如果您想将其应用于所有剑道窗口,而不必将包含实例的变量放在手边,您可以这样做:

    $(document).on('click', '.k-overlay', function () 
        var kendoWindow = $('.k-window-content.k-content', $(this).next('div.k-widget.k-window'));
        if (kendoWindow == null || kendoWindow.length == 0) 
            return;
        
        kendoWindow.data('kendoWindow').close();
    );

【讨论】:

【参考方案3】:

以前的答案对我不起作用。显然,较新版本的剑道直到激活窗口后才会生成覆盖。所以添加点击事件失败,因为在 DOM 中找不到 .k-overlay 类。解决方案是在窗口完成动画后添加事件。我使用 jQuery 添加事件监听器,因为 kendo 使用 jQuery。

var myWindow = $('#myWindow').kendoWindow(
    width: "310px",
    actions: [],
    visible: false,
    modal: true,
    title: "This is my title",
    activate: function() 
        // Close window when clicked outside of window
        $(".k-overlay").on("click",
            function() 
                myWindow.close();
            );
    
).data("kendoWindow");

【讨论】:

【参考方案4】:

要在最新版本的剑道使用中申请所有窗口,如下所示,

$(document).on('click', '.k-overlay', function () 
    var kendoWindow = $(this).next('div.k-widget.k-window').find('.k-window-content');
    if (kendoWindow == null || kendoWindow.length == 0) 
        return;
    
    kendoWindow.data('kendoWindow').close();
);

【讨论】:

以上是关于单击窗口外覆盖时如何关闭 Kendo UI 模态窗口?的主要内容,如果未能解决你的问题,请参考以下文章

Kendo UI - 为啥我不能正确打开和关闭窗口?

Winforms:在对话框外单击时关闭模式对话框

如何在模态窗口中显示 pdf? [关闭]

在 Ionic 的模态之外单击时如何防止模态消失?

在窗口外单击时如何关闭/隐藏窗口?

在同一个aspx页面中同时使用jqgrid和jquery-ui,ui的dialog弹窗一闪就关闭,如何让弹窗留住?