0

我觉得这是一件相当简单的事情,但我似乎无法弄清楚。在操作完成后,我需要一个函数来返回它的值。

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);
} 

但是,当我这样做时,它会在框甚至附加到正文标记之前将 msg 作为“未定义”返回。如何在此基础上添加“完成”或类似内容?

4

4 回答 4

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);
} 
于 2013-05-22T00:00:49.903 回答
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

}

于 2013-05-21T23:57:51.400 回答
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放在页面上的某个地方。

于 2013-05-22T00:00:25.337 回答
0

无论您想做什么,都需要将其放入您的

click(function() { ... }

. 说明:这个函数只会在实际“点击”发生后返回一些东西。

由于您的“my_function()”在单击后只会返回任何内容(它不会返回),因此“msg”将始终未定义!->“警报”不会等到“msg”被分配...

于 2013-05-22T00:04:56.923 回答