Return 调用函数时 jquery.deferred 对象的响应
Return response of jquery.deferred object when call the function
我正在尝试创建自定义对话框,我 return 响应用户在该对话框中单击的内容。我使用了延迟对象,但是当我调用该函数时它立即 returns。
当我调用函数时
var value = showDelete("Hello World");
总是 return undefined
而不是 "Ok" 或 "Cancel"。
我在这段代码中做错了什么。帮我。提前致谢。
首先,您需要 return 从 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 的方法同样有效。
我正在尝试创建自定义对话框,我 return 响应用户在该对话框中单击的内容。我使用了延迟对象,但是当我调用该函数时它立即 returns。
当我调用函数时
var value = showDelete("Hello World");
总是 return undefined
而不是 "Ok" 或 "Cancel"。
我在这段代码中做错了什么。帮我。提前致谢。
首先,您需要 return 从 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 的方法同样有效。