如何在jquery ui对话框中检测触发close事件的内容

时间:2009-08-25 15:09:48

标签: jquery-ui modal-dialog

我有一个创建和取消按钮作为jquery-ui模式对话框的一部分。只有当用户点击“创建”时,我才想在关闭对话框后做某些事情。如果他们点击“取消”,或“X”或按Esc,我想做其他事情。有没有办法将参数传递给close事件处理程序或其他一些方法来检测导致关闭的原因?

4 个答案:

答案 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');