【问题标题】:Kendo UI Window Close Event: prevent window closeKendo UI 窗口关闭事件:防止窗口关闭
【发布时间】:2013-01-25 19:12:43
【问题描述】:

我们正在为具有各种形式的应用创建警告消息。在简单页面中这很容易,我们只检测表单元素的变化,如果用户想要卸载页面,我们会向他们显示警告消息。

但是......我们在 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,但我们的窗口是动态创建的。

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

提前致谢!

代码是我们想要插入这个剑道东西的解决方法:

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

【问题讨论】:

  • 不确定我是否理解您的问题...为什么不在关闭事件处理程序中实现您的测试,如果您不想关闭就阻止它?
  • 因为剑道关闭事件发生在我的警报之前:/
  • 按照@Pechka 的建议在关闭事件处理程序中添加警报。

标签: jquery events kendo-ui kendo-window


【解决方案1】:

动态创建 Windows 并不重要。如果你可以创建它们,那么你可以绑定这样的处理程序。如果 Alex Gyoshev 共享的代码不好。

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

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

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

【讨论】:

  • 是的,到目前为止,这是我们更好的解决方案,但我们希望创建一个代码,以便所有 Windows 最终都会在表单项发生更改时显示该消息(并且不使用 Kendo 的关闭事件)。我们的想法是在您可以在原始帖子中看到的代码中使用原始代码(我在几分钟前添加了它)
  • 提示:我知道这只是一个示例,但不要使用 window 作为 ID,因为 window 是 JavaScript 中的保留字。确实有人这样做了,我不得不在我的 window.location.reload 之前的项目中更正他们的代码,我后来做了正确的工作。
【解决方案2】:

我遇到了剑道窗口.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

更多关于 Kendo Windows 的信息:http://demos.telerik.com/kendo-ui/window/events

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-06
    • 2019-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多