我有一个创建和取消按钮作为jquery-ui模式对话框的一部分。只有当用户点击“创建”时,我才想在关闭对话框后做某些事情。如果他们点击“取消”,或“X”或按Esc,我想做其他事情。有没有办法将参数传递给close事件处理程序或其他一些方法来检测导致关闭的原因?
答案 0 :(得分:5)
在关闭事件中,您可以通过查看事件参数(参数1)来判断发生了什么。
如果通过单击 [x] 关闭对话框,则会获得鼠标事件字段。
同样,如果按 Escape 关闭对话框,则会显示键盘事件字段。
如果对话框以编程方式关闭,则上述情况均不适用。
所以,一个好的开始是查看 event.which 。使用 [x] 结算将意味着您获得鼠标按键值(1到3),而使用 Escape 结算将意味着您获得了密钥代码(27)。以编程方式关闭意味着event.which将是未定义的。
现在回到你的问题......
如果他们按下Create,你想做一件事 - 这很容易,只需将它放在该按钮的功能中。
您想在[x],Escape或单击取消上执行其他操作。创建一个名为 canceled()(或其他)的函数,然后在取消按钮上调用该函数,并在关闭事件中调用它,如果event.which具有值。 / p>
像这样......
buttons: {
'Create': function() {
// do your stuff here
$(this).dialog('close');
},
Cancel: function() {
cancelled();
$(this).dialog('close');
}
},
close: function(event) {
if (event.which) {
cancelled();
}
}
我认为这涵盖了你所需要的东西,它避免了制造一个变量来跟踪你去过的地方。
答案 1 :(得分:4)
试试这里所描述的: http://jqueryui.com/demos/dialog/#modal-confirmation
- 编辑
从上面的链接复制:
var trigger = "";
$("#dialog").dialog({
bgiframe: true,
resizable: false,
height:140,
modal: true,
overlay: {
backgroundColor: '#000',
opacity: 0.5
},
buttons: {
'Create': function() {
// do your stuff
trigger = "create";
$(this).dialog('close');
},
Cancel: function() {
$(this).dialog('close');
}
}
close: function() {
if (trigger == "create")
// do something here
}
});
答案 2 :(得分:4)
为您的按钮定义事件,如下所示:
$("#dialog").dialog({
bgiframe: true,
autoOpen: false,
height: 300,
modal: true,
buttons: {
'Create': function() {
alert('the user clicked create');
$(this).dialog('close');
},
Cancel: function() {
alert('the user clicked cancel');
$(this).dialog('close');
}
},
close: function() {
// do somthing
}
});
另外看一下传递给close事件的参数,方法签名是:
function(event, ui)
您可以在此处找到更多信息link text
答案 3 :(得分:0)
$('#jqPopup').dialog({modal:true,title:tit,autoOpen:false,beforeclose:function(){
//Will get triggered when user press the 'X' button
$("#wholeContent").css('display','block');}
});
$("#wholeContent").css('display','none');
$('#jqPopup').dialog('open');