Kendo Window的close事件调用jQuery unbind解绑不生效如何解决?
根因分析
你遇到的解绑失效问题通常由以下两种原因导致:
- Kendo UI组件有自身封装的事件管理逻辑,若同一事件回调被重复绑定多次,单次unbind无法完全移除所有绑定
- 若绑定时使用了
$.proxy等方法修改函数上下文,解绑时传入的函数引用和绑定时的引用不一致,会导致匹配失败无法解绑
解决方案
方案1:绑定前去重,避免重复绑定
如果customFunction没有被包装过,只需要在绑定前先执行一次解绑,避免重复绑定即可:
var confirmDialog = $(dialogId).data("kendoWindow"); // 绑定前先解绑,避免重复绑定导致多次触发 confirmDialog.unbind("close", customFunction); confirmDialog.bind("close", customFunction); $(okBtnId).click(function(){ confirmDialog.unbind("close", customFunction); confirmDialog.close(); });
方案2:使用单次绑定API
如果你的customFunction本来就只需要在第一次触发close事件时执行,可以直接使用Kendo组件提供的one方法绑定,回调执行后会自动解绑,不需要手动处理:
var confirmDialog = $(dialogId).data("kendoWindow"); // one方法绑定的事件只会触发一次,执行后自动解绑 confirmDialog.one("close", customFunction); $(okBtnId).click(function(){ confirmDialog.close(); });
兜底方案:移除所有close事件回调
如果不需要保留其他close事件回调,可以直接不传第二个参数,移除所有绑定的close事件:
$(okBtnId).click(function(){ confirmDialog.unbind("close"); confirmDialog.close(); });
内容的提问来源于stack exchange,提问作者Affan Sheikh
相关产品推荐
相关产品推荐

