Kendo UI 窗口关闭事件:防止窗口关闭

5
我们正在为一个带有各种表单的应用程序创建警告消息。在简单页面中,我们只需检测表单元素的更改,如果用户想要卸载页面,我们就会显示警告消息。
但是...我们还有一些在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
我不确定我是否理解您的问题...为什么不将测试实现在关闭事件处理程序中,如果您不想关闭,只需防止关闭即可? - OnaBai
1
因为kendo关闭事件发生在我的警告之前:/ - Tebo
1
按照 @Pechka 的建议,在关闭事件处理程序中添加您的警报。 - OnaBai
2个回答

9

如果您能够动态地创建Windows窗口,那么绑定处理程序就不是问题。如果Alex Gyoshev分享的代码有问题,您可以按照以下方式最初绑定处理程序:

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

请分享您的设备设置详细信息,您可以尝试将其中一种方法集成到您的案例中。


1
是的,那是我们目前为止更好的解决方案,但我们想创建一个代码,以便如果表单项发生更改,所有Windows都会显示该消息(而不使用Kendo的关闭事件)。我们的想法是在原始帖子中可以看到的代码内部使用原始代码(我几分钟前添加了它)。 - Tebo
3
提示:我知道这只是一个例子,但不要使用window作为ID,因为window是JavaScript中的保留字。有人实际上这样做了,我在之前参与的某个项目中不得不纠正他们的代码,然后我的window.location.reload才能正常工作。 - vapcguy

3

我发现Kendo Window .Events(events => events.Close("onClose") 事件根本没有触发。可能是一个Kendo的bug。但是,我通过使用你发布的链接中的代码来解决了这个问题:

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

您可以将其作为与您发布的代码完全分开的例行程序放置 - 不要将其放在那里。 如果您真的在动态创建新的Kendo窗口,您应该给它们所有唯一的个人ID,然后将上面的代码放入一个函数中,传递该ID并使用传入的动态生成的ID替换“#myWin”,以便每个窗口都获得bind绑定。
更多关于Kendo Windows的信息: http://demos.telerik.com/kendo-ui/window/events

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接