Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 调用函数时返回jquery.deferred对象的响应_Javascript_Jquery_Jquery Deferred - Fatal编程技术网

Javascript 调用函数时返回jquery.deferred对象的响应

Javascript 调用函数时返回jquery.deferred对象的响应,javascript,jquery,jquery-deferred,Javascript,Jquery,Jquery Deferred,我试图创建自定义对话框,并返回用户在该对话框中单击的内容的响应。我使用deferred对象,但调用函数时它会立即返回 当我调用函数时 var value = showDelete("Hello World"); 它总是返回未定义的,而不是“确定”或“取消” 在这个代码中我做错了什么。帮助我。提前感谢。首先,您需要从showDelete方法返回延迟对象 其次,在事件处理程序中,变量value是一个延迟对象,因此需要使用done方法来获取值。检查此代码,它似乎可以工作: function sho

我试图创建自定义对话框,并返回用户在该对话框中单击的内容的响应。我使用deferred对象,但调用函数时它会立即返回

当我调用函数时

var value = showDelete("Hello World");
它总是返回未定义的
,而不是“确定”或“取消”


在这个代码中我做错了什么。帮助我。提前感谢。

首先,您需要从
showDelete
方法返回延迟对象

其次,在事件处理程序中,变量
value
是一个延迟对象,因此需要使用
done
方法来获取值。检查此代码,它似乎可以工作:

function showDelete(msg){
    var defers = $.Deferred();
    jQuery.when(showAlert(msg)).done(function(){
        alert("Ok");
        defers.resolve("ok");    // resolve, not return value
    }).fail(function(){
        alert("Cancel");
        defers.resolve("cancel");   // resolve, not return a value
    }).always(function(){
        jQuery("#confirm").hide();
    })
    return defers.promise();    // return a promise
}
function showAlert(msg){
    var defer2 = $.Deferred();
    jQuery("#msg").html(msg);
    jQuery("#confirm").show();
    jQuery("#confirm input:first").on("click",function(){
        defer2.resolve();
    });
    jQuery("#confirm input:last").on("click",function(){
        defer2.reject();
    });
    return defer2.promise();
}
jQuery("#alertt").bind("click", function(){
    var value = showDelete("Hello World");
    value.done(function(result){    // use done handler
        console.log(result); //logs ok or cancel;
    });
});
此外,在场景中使用延迟对象似乎是不必要的。deferred的主要用途是简化处理长时间运行的异步任务(例如AJAX),但在您的情况下,看起来没有deferred的方法也同样有效