-1

我正在尝试使用 JQuery 对话框来确认从不同表中删除不同的记录,因此它是从代码中的不同位置引用的 div(重用对话框以确认不同的操作)。我正在使用这个例子:http: //jqueryui.com/dialog/#modal-confirmation

由于每次调用都必须确认一个非常不同的操作,因此我不能只将要执行的代码放在对话框选项按钮的 Ok 或 Cancel 按钮的回调中{}

我想要一个类似于 VB 的 MsgBox 的东西,它的返回值指示按下的按钮(无论是“Ok”、“Accept”还是“close”......)。像这样的东西:

if ( $(target_dialog).dialog('open') == 'Ok'){
    // Do something awesome
}else if( $(target_dialog).dialog('open') == 'Cancel') {
    // Do something not that awesome
}

谢谢你的帮助。

编辑:这有点像这里的 JS confirm() 示例(http://www.w3schools.com/js/tryit.asp?filename=tryjs_confirm),但我不希望它是一个弹出窗口,而是一个可定制的和灵活的 jqueryui 对话框。

EDIT2:就像@vishwanath 建议的那样

$("#dialog-confirm").dialog({
//height, modal, width... settings
buttons : {
    "OK": function() { 
        // here is the magic
            action = $(this).data('action');
        var actionToPerform = actions[action];
        actionToPerform.call(this);
        // end of magic
        $( this ).dialog( 'close' );
    }, 
    Cancel: function() {
        console.log("non awesome stuff here");
        $( this ).dialog( 'close' );
    }
}
});


var actions = {
action1 : function(){
    console.log(''Do action1 stuff here);
}, 
action2 : function(){
    console.log('Do action2 stuff here');
}
// and so on...
}

并且可以针对不同的答案从不同的父母执行不同的动作。

$( '#dlgConfirm' ).data('action', 'action1').dialog( 'open' );

谢谢。

4

2 回答 2

0

一种可能的解决方案是使用 jquery UI 的自定义选项。

按照以下创建模式自定义选项,该选项将在创建对话时动态设置。在您的点击处理程序中检查该选项并使用该模式根据您的模式选择正确的操作。

var mode = 'edit'; //Set this dynamically
$("#dialog-confirm").dialog({
    height : 140,
    modal : true,
    mode : mode,
    buttons : [ {
        text : "OK",
        click : function(event) {
            var mode = $("#dialog-confirm").dialog('option', mode);
            var actionToPerform = actions[mode];
            actionToPerfom.call(this, event);
        }
    }, 
    {
        text : "Cancel",
        click : function(event, ui) {
            console.log("non awesome stuff here");
        }
    } ]
});


var actions = {
    edit : function(){
        console.log(''Do Edit stuff here);
    }, 
    delete : function(){
        console.log('Do delete stuff here');
    }

}
于 2013-05-06T07:39:32.747 回答
0

您可以使用 Promises(又名“延迟对象”)来模拟一个在对话框关闭后返回值的函数。将此与模式对话框结合使用,以确保用户在关闭该对话框之前无法执行任何其他操作:

function myConfirm() {
    my def = $.Deferred();
    $('#myDiv').dialog({
       modal: true,
       buttons: [ {
           'ok': def.resolve,
           'cancel': def.reject
       } ]
    });
    return def.promise();
}

(添加用于参数化对话框的代码以适应)

然后:

myConfirm().done(function() {
    // user pressed OK
}).fail(function() {
    // user pressed Cancel
});
于 2013-05-07T19:04:11.217 回答