如何捕获含iframe的KendoWindow关闭按钮点击事件?
解决KendoWindow内嵌动态iframe时捕获关闭按钮点击事件的问题
我明白你的场景:你有一个内嵌iframe的KendoWindow,iframe会根据参数动态切换,已经实现了特定iframe加载时的确认弹窗,但就是抓不到窗口右上角关闭按钮的点击事件对吧?下面给你两种靠谱的解决方案,结合你提到的ventanaNomb判断逻辑来实现:
方案一:绑定KendoWindow官方的close事件(推荐)
KendoWindow本身提供了close事件,不管iframe怎么切换,这个事件都是绑定在窗口实例上的,不会因为iframe刷新而失效。你可以在事件回调里判断当前窗口/iframe是否需要弹出确认框:
// 初始化或获取KendoWindow实例 var miVentana = $("#miVentana").kendoWindow({ // 你的窗口配置:比如width、height、title等 close: function(e) { // 获取当前窗口的标识(对应你的ventanaNomb变量) var ventanaNomb = this.options.title; // 假设你用title存窗口名称,或者自定义属性 // 获取当前iframe的信息(如果需要根据iframe内容判断) var iframeActual = this.element.find("iframe")[0]; var urlIframe = iframeActual.src; // 你的判断逻辑:如果是需要确认的窗口/iframe if (ventanaNomb === "需要确认的窗口名称") { // 替换成你的判断条件 var confirmacion = confirm("确定要关闭这个窗口吗?"); if (!confirmacion) { // 阻止窗口关闭 e.preventDefault(); return; } } // 如果不需要确认,或者用户确认了,窗口会正常关闭 } }).data("kendoWindow");
这个方案的好处是完全贴合Kendo的API,不会有DOM元素选择的兼容性问题。
方案二:用事件委托捕获关闭按钮的点击
如果方案一因为某些特殊场景(比如窗口是动态创建的)不生效,可以直接针对KendoWindow的关闭按钮做事件委托。Kendo的关闭按钮有固定的类名k-window-close,我们可以把事件绑定到文档上,确保每次点击都能捕获:
// 事件委托:监听所有KendoWindow关闭按钮的点击 $(document).on("click", ".k-window-close", function(event) { // 找到对应的KendoWindow实例 var elementoVentana = $(this).closest(".k-window"); var miVentana = elementoVentana.data("kendoWindow"); var ventanaNomb = miVentana.options.title; // 你的窗口标识 // 你的判断逻辑 if (ventanaNomb === "需要确认的窗口") { var confirmacion = confirm("确认关闭?"); if (!confirmacion) { // 阻止默认关闭行为 event.stopPropagation(); event.preventDefault(); return false; } } });
为什么用事件委托?因为如果你的KendoWindow是动态生成的,或者iframe切换时窗口DOM有变动,直接绑定到按钮上的事件会丢失,而事件委托是绑定在父级(这里是document)上,不管按钮什么时候创建都能捕获到点击。
注意点
- 确保
ventanaNomb的取值逻辑正确,比如你是存在窗口的title里,还是自定义的data-*属性里,要对应上代码中的取值方式。 - 如果是动态切换iframe后需要更新判断条件,可以在iframe的
load事件里更新窗口的标识变量,比如给KendoWindow实例加一个自定义属性:miVentana._currentIframeName = "新的窗口名称",然后在close事件里读取这个属性。
内容的提问来源于stack exchange,提问作者Pedro Jose
相关产品推荐
相关产品推荐

