2012-04-13 15 views
4

我想要做的是將函數的名稱(X)作爲參數傳遞給函數Y,然後讓函數Y創建一個觸發函數X的事件處理函數。傳遞函數名稱,然後在事件處理程序中使用

我想函數y創建以下:

$('#form').submit(function(e){e.preventDefault();X();}); 

我已經試過:

var name="X()"; 
X(name); 

function Y(id){ 
    $('#element').submit(function(e){e.preventDefault();id;}); 
} 

此,可以預見,不能正常工作。 (我真的不相信會這樣!)但是怎麼做呢,或者(1)按照我的方式來做,或者(2)將整個X函數wholus-bolus傳遞給Y?

謝謝。

+0

可能重複[Java腳本創建自定義的回調(http://stackoverflow.com/questions/2190850/javascript-create-自定義回調) – ManseUK 2012-04-13 08:37:28

回答

12

here's a demo if you feel doubtful skeptical (sounds better) :D

//create x 
function x(){ 
    alert('im from x'); 
} 

//create y that receives the function 
function y(callback){ 

    //bind your handler which calls callback (which was x) 
    $('element').submit(function(){ 
     callback(); 
    }); 
} 

//call y that sends over a reference of x 
y(x); 
+0

我既不懷疑也不懷疑:)我只是無法讓它立即工作,因爲我將函數名作爲變量傳遞(即var a =「my_function」; y(a);)而不是傳遞函數本身。再次感謝。 – Nick 2012-04-13 09:43:11

1

你X的對象必須是一個函數,而不是一個字符串。

function X() { /*code*/ } 

您可以通過在X末尾返回false來防止默認操作;

function X() { 
    /*code*/ 
    return false; 
} 

而且你可以使用它像這樣另一個函數內部:

function Y(callback){ 
    $('#element').submit(callback); 
} 
Y(X); 
+0

澄清,我必須通過函數本身,而不是字符串中的函數名稱是非常有用的。謝謝。 – Nick 2012-04-13 08:45:46

相關問題