我试图创建一个等待其属性首先响应然后继续其进程的函数。函数调用如下所示:
processResult(getResult());
问题是, getResult 函数在返回值之前需要时间,因为 theResult 函数为用户提供了三个按钮的接口,并且只返回一个如果用户点击按钮,则该函数如下所示:
function getResult() {
$(document.createElement('button'))
.html("1")
.click(function() {
return 1;
})
.appendTo($(document.body));
$(document.createElement('button'))
.html("2")
.click(function() {
return 2;
})
.appendTo($(document.body));
$(document.createElement('button'))
.html("3")
.click(function() {
return 3;
})
.appendTo($(document.body));
}
processResult 函数如下所示,这只是一个例子:
function processResult(arg) {
alert(arg);
}
当我加载网站时,函数调用 undefinied ,我知道这种行为是Javascript异步行为的结果,但我不知道如何改进我的代码, processResult 函数等待返回 getResult 函数。
我希望你能帮助我,谢谢你
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
function getResult() {
$(document.createElement('button'))
.html("1")
.click(function() {
return 1;
})
.appendTo($(document.body));
$(document.createElement('button'))
.html("2")
.click(function() {
return 2;
})
.appendTo($(document.body));
$(document.createElement('button'))
.html("3")
.click(function() {
return 3;
})
.appendTo($(document.body));
}
function processResult(arg) {
alert(arg);
}
processResult(getResult());
</script>
</head>
<body>
</body>
&#13;
答案 0 :(得分:2)
这就是回调的用途:
function getResult(callback) {
$(document.createElement('button'))
.html("1")
.click(function() {
callback(1);
})
.appendTo($(document.body));
$(document.createElement('button'))
.html("2")
.click(function() {
callback(2);
})
.appendTo($(document.body));
$(document.createElement('button'))
.html("3")
.click(function() {
callback(3);
})
.appendTo($(document.body));
}
然后做:
getResult(processResult);
顺便说一下,你的 return 会返回jquery函数并且什么都不做......
你可以 - 如果你有更大的js知识 - 看看js Promises。他们很棒......
缩短代码:
function getResult(callback) {
for(var i=1;i<4;i++){
(function(i){
$(document.createElement('button'))
.html(i+"")
.click(function() {
callback(i);
})
.appendTo($(document.body));
})(i);
}
}
解决方法强>
如果你真的需要坚持'processResult(getResult());',你可以这样做(不推荐):
function getResult() {
var main={callback:function(){}};
for(var i=1;i<4;i++){
(function(i){
$(document.createElement('button'))
.html(i+"")
.click(function() {
main.callback(i);
})
.appendTo($(document.body));
})(i);
}
return main;
}
function processResult(cb){
cb.callback=function(a){
//your code
};
}
答案 1 :(得分:0)
如果我理解你的问题,我会以不同的方式解决。创建所有按钮后,只需向所有按钮添加一些事件侦听器。该函数读取按钮的HTML并将其传递给您的函数。根据您的实际应用程序,您可能需要稍微调整一下。 ;)
$('button').click(function() { processResult($(this).text()) });