2009-12-29 91 views
0

我已经在页面加载中定义了我的对话框。我可以看到对话框,一切似乎要被罚款至今:jquery对话框关闭不被触发

dlg1 = $("#modalHolder"); 
dlg1 = dlg1.dialog({ 
    width: 300, 
    height: 150, 
    modal: true, 
    autoOpen: false, 
    resizable: false, 
    closeOnEscape: false, 
    draggable: false, 
    overlay: { 
     backgroundColor: 'red', 
     opacity: 0.65 
    }, 
    open: function(event, ui) { $(".ui-dialog-titlebar-close").hide(); } 
}); 

现在我想动态设置关闭事件,所以我想这:

function setCloseFunction(fun) 
{ 
    dlg1.dialog({ 
     close: function(event, ui) 
     { 
      alert("2"); 
      fun(); 
     } 
    }); 
} 

我叫它为:

setCloseFunction(new Function("alert('1')")); 

但是,当关闭对话框时,警报从不出现。有任何想法吗?

+0

你不应该使用'Function'构造函数来创建一个函数。相反,你应该写'function(){alert('1'); }'。 – SLaks 2009-12-29 16:33:46

+0

感谢您的提示。 – vikasde 2009-12-29 16:58:26

回答

0

你应该写:

dlg1.bind('dialogclose', function(event, ui) { 
    alert("2"); 
    fun(); 
}); 

setCloseFunction(function() { alert('1'); }); 

编辑:要删除​​功能,可以调用unbind('dialogclose')

+0

谢谢Slaks。 – vikasde 2009-12-29 16:52:22

1

在初始化对话框时,setCloseFunction中使用的语法才是正确的。如果对话框已经存在,在你的情况,你通常改变的选项是这样的:

dlg1.dialog('option', optionName, value); 

事件,如close,你的监听器绑定到它:

dlg1.bind('dialogclose', function(event, ui) { 
    ... 
}); 
+0

谢谢。这工作。 – vikasde 2009-12-29 16:40:38

+0

如何从dialogClose中删除相同的函数? – vikasde 2009-12-29 16:47:27

+1

查看'unbind'函数:http://docs.jquery.com/Events/unbind#typefn – 2009-12-29 17:08:41