【问题标题】:jQuery UI event functionality extendingjQuery UI 事件功能扩展
【发布时间】:2012-01-03 12:03:15
【问题描述】:

我想在关闭时添加自动销毁对话框的功能,而不向当前项目中的每个对话框调用添加任何特殊代码。所以我认为它需要覆盖默认对话框close事件。

我找到了一种方法来做到这一点(例如:How to extend a jquery ui widget ? (1.7)),但我不想只是覆盖事件:我还需要保存事件的先前行为并在其后添加$(this).dialog("destroy") 调用。

有什么建议吗?

【问题讨论】:

  • 你必须先保存一个销毁处理程序,它运行你自己的,然后保存一个。你如何设法覆盖这个处理程序?

标签: javascript jquery jquery-ui inheritance extending


【解决方案1】:

我不能 100% 确定这是否正确,但我认为您可以像这样安全地覆盖 close 方法:

$.ui.dialog.prototype._originalClose = $.ui.dialog.prototype.close;
$.ui.dialog.prototype.close = function() {
        alert ('My stuff');
        $.ui.dialog.prototype._originalClose.apply(this, arguments);
};

你可以在http://jsfiddle.net/8KKMm/看到这个工作

然而,避免覆盖外部库通常是个好主意。可能有更好的方法来实现您的目标,而无需使用 jQuery UI 库。请查看 Dialog 组件的可用事件:http://jqueryui.com/demos/dialog/

【讨论】:

  • 谢谢,工作正常。而且,是的,使用事件会更好。无论如何,也想知道如何调用内部覆盖的方法'destroy'或'open' self? TIA。
  • 我认为您可以在这种情况下简单地调用this.destroy()。看看jsfiddle.net/8KKMm/2
【解决方案2】:

您可以将dialogclose 处理程序添加到页面的body 元素。

您可以找到示例here

对话框类的关闭函数不需要重写,直接使用对话框类提供的事件即可。

例如:

$("body").on("dialogclose", function(){
    alert("closed");
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-09
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多