在函数F1内调用函数F2。基于F2返回值继续F1执行

时间:2016-09-17 06:48:01

标签: javascript jquery callback promise bootstrap-modal

我想在函数中调用一个模态。并根据点击模态我想继续我的功能。

我知道可以通过不同的承诺或回电来完成。但我无法理解如何做到这一点

我的功能是

$(".delete").click(function(){


/// call a modal
     $(".confirm").modal();


    /*
     now if clicked yes in modal 
      then continue with my ajax call
     else return false
    */


});

我期待延期承诺或回拨答案。因为我想知道它们在这种情况下是如何工作的

2 个答案:

答案 0 :(得分:1)

试试这个

$(".confirm").dialog({
            modal: true,
            buttons: {
                Yes: function () {
                    // Ajax call 
                    $(this).dialog("close");
                },
                No: function () {
                    $(this).dialog("close");
                }
            },
            close: function (event, ui) {
                $(this).remove();
            }
});

编辑:这是一个带有“回调”的版本(不想添加新答案,因为这包含基础知识,只是稍加重构):

function modalwithcallbacks(selector, yes, no, close)
{
    $(selector).dialog({    
        modal: true,
        buttons: {
            Yes: yes,
            No: no,
        },
        close: close
    });
}

modalwithcallbacks(
    ".confirm", 
    function () { alert("yes"); $(this).dialog("close"); },
    function () { alert("no"); $(this).dialog("close"); }
    function () { $(this).remove(); }
);

下一步是将其设为$.fn.以删除选择器部件或直接在方法中添加对话框。

您可以选择要进行哪些操作作为回调(例如只是“是”)并保持关闭/不内联,给出:

$(".delete").click(function() {
    modalwithcallbacks(".confirm", function() {
        // yes clicked, continue with ajax call
    });
});

答案 1 :(得分:0)

以下是如何使用自己的延迟:

var deferred = $.Deferred();
$(".confirm").dialog({
        modal: true,
        buttons: {
            Yes: function () {
                // Ajax call 
                deferred.resolve("yes");
            },
            No: function () {
                deferred.resolve("No");
            }
        }
});

deferred.done(function(value) {
    $(".confirm").dialog('close');
    alert(value);
});

https://jsfiddle.net/mjwava8n/

亲切的问候