2013-05-21 88 views
0

我覺得這是一個相當簡單的事情,但我似乎無法弄清楚。我需要一個函數在一個操作完成後返回它的值。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標籤返回味精。如何在這些行上添加「完整」或其他內容?

+0

您正在添加事件偵聽器。聽衆可以多次觸發,每次點擊一次。有一個返回值沒有意義。 – Halcyon

回答

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 

}

+0

但是如果我不希望它在點擊按鈕後才返回呢? – r0tterz

+0

然後你應該通過你想做的回調。確切地說,是 – rtcherry

+0

。看@rtcherry答案,它會做到這一點。 – iurisilvio

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

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

這工作完美,謝謝! – r0tterz

0
不管你想要做

,你需要把它放進你的

click(function() { ... } 

。 說明:該功能只會在實際發生「點擊」後纔會返回。由於你的「my_function()」只會在點擊後返回任何東西(它不會),所以「msg」將始終未定義! - >「警報」不會等到「msg」已被分配...