jQuery - 返回一次函数完成

时间:2013-05-21 23:53:59

标签: javascript jquery

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

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”。如何在此处添加“完整”或其他内容?

4 个答案:

答案 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”被分配......