Kendo UI Window Close事件:阻止窗口关闭

时间:2013-01-25 19:12:44

标签: jquery events kendo-ui kendo-window

我们正在为具有各种表单的应用创建警告消息。在简单的页面中,它非常简单,我们只检测表单元素的更改,如果用户想要卸载页面,我们会向他们显示警告消息。

但是......我们在Kendo Windows中也有一些表单,我们需要在用户想要关闭窗口时显示相同的确认消息。这是我们现在的脚本:

$('div:has(div[data-role="window"])').find('a:has(span.k-i-close)').live('click', function (e) {
    if (formHasChanged) {
        alert('pepe');
        return false;
    }
    return true;
});

该脚本的问题在于它没有阻止窗口关闭,关闭事件似乎发生在我们的警报之前。 此解决方案可能有效http://www.kendoui.com/forums/ui/window/new-event-onclosing.aspx,但我们的窗口是动态创建的。

有没有人知道如何解决这个问题?

提前致谢!

代码是我们想要插入这个kendo事情的解决方法:

var formHasChanged = false;
$('form.withWarningMessage').find('input,select,textarea').live('change', function () {
    formHasChanged = true;
    window.onbeforeunload = function () {
        if (formHasChanged) {
            return confirmWarningMessage;
        }
    };
    $('input:submit').live('click', function () {
        formHasChanged = false;
    });
});

2 个答案:

答案 0 :(得分:7)

您即时创建Windows并不重要。如果您可以创建它们,那么您可以绑定此类处理程序。如果Alex Gyoshev分享的代码不是很好。

您最初可以像这样绑定处理程序:

$("#window").kendoWindow({
    close:function(e){
        if (!confirm("are you sure?"))
        e.preventDefault();
    }
})

分享有关您的设置的详细信息,应该有一种方法可以将这些方法中的一个集成到您的案例中。

答案 1 :(得分:1)

我遇到了剑道之窗.Events(events => events.Close("onClose")根本没有射击的地方,对我而言。也许是一个剑道虫。但话虽如此,我使用您发布的链接中的代码解决了这个问题:

$("#myWin").data("kendoWindow").bind("close", function(e) {
    if (!confirm("Are you sure?"))
        e.preventDefault();
}); 

你可以把它当作一个与你发布的代码完全分开的例程 - 它不会进入那里。如果您真的动态创建新的Kendo Windows,您应该为它们提供所有唯一的个人ID,然后将上面的代码放入一个函数中,传入该ID并替换" #myWin"使用该传入的动态生成的ID,因此每个窗口都获得bind

有关剑道Windows的更多信息:http://demos.telerik.com/kendo-ui/window/events