我觉得这是一件相当简单的事情,但我似乎无法弄明白。我需要一个函数在动作完成后返回它的值。
var msg = my_function();
alert(msg);
function my_function(){
box = $("<div>");
button = $("<span>submit</span>").click(function(){
box.remove();
return "Hello World!";
});
$("body").append(box);
}
但是,当我执行此操作时,它会在将框添加到body标记之前将msg返回为“undefined”。如何在此处添加“完整”或其他内容?
答案 0 :(得分:3)
my_function
不会等到用户执行操作。您传递给.click()
的是另一个函数,它将作为事件处理程序附加并在事件发生时执行。这称为异步(在这种情况下也是事件驱动的)行为。
获取你正在寻找的返回值的技巧是提供你自己的回调my_function
,当它可用时将使用该返回值调用。请注意,这个回调将在有人点击按钮时执行(顺便说一下,你必须添加到正文中,否则它不会显示在任何地方):
var myCallback = function(msg) {
alert(msg);
}
var msg = my_function(myCallback);
function my_function(callback) {
var box = $("<div>");
var button = $("<span>submit</span>").click(function(){
box.remove();
callback("Hello World!");
});
$("body").append(box).append(button);
}
答案 1 :(得分:0)
你把回程放在了错误的地方。回调函数中的return语句将不执行任何操作。
var msg = my_function();
alert(msg);
function my_function(){
box = $("<div>");
button = $("<span>submit</span>").click(function(){
box.remove();
return "Hello World!"; // this return does not make sense
});
$("body").append(box);
return "Hello World!"; // return here what you want
}
答案 2 :(得分:0)
我认为这就是你想要的:
my_function(function(msg) { alert(msg); });
function my_function(callbackFn){
box = $("<div>");
button = $("<span>submit</span>").click(function(){
box.remove();
callbackFn("Hello World!");
});
$("body").append(box);
}
但你应该把span
放在页面的某个地方。
答案 3 :(得分:0)
无论你想做什么,都需要把它放到你的
中click(function() { ... }
。 说明:此函数仅在实际发生“单击”后返回一些内容。
由于你的“my_function()”只会在点击后返回任何内容(它没有),“msg”将始终未定义! - &GT; “警报”不会等到“msg”被分配......