2011-05-17 58 views
1

我在想,是否有可能將變量傳遞給要在單擊按鈕時執行的函數,並且該函數是由變量給出的。在jQuery中使用單個變量添加函數參數

此外,函數的參數可能不止一個,所以我用,將它們分開。

所以有什麼方法可以使用任何jQuery插件或函數將參數放入函數中。請幫助我,因爲我迷惑大時間!這是我當前的jQuery代碼:

function Func (a,b){ 
alert(a+' | '+b); 
} 
var Parameters = 'cool,123'; 
var Function = Func; 

$('button').click(Function); 

Problem demo

在此先感謝

回答

2

這是你以後在做什麼?

function Func (a,b){ 
alert(a+' | '+b); 
} 
var Parameters = 'cool,123'; 

$('button').click(function() { 
    Func.apply(this, Parameters.split(",")); 
}); 

演示:http://jsfiddle.net/6nJx7/14/

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/function/apply

+0

這是最好的答案!它贏得了傑克鍋! – 2011-05-17 10:30:40

+1

唯一的問題是,你不能傳遞對象/函數作爲參數,只有字符串會在需要的時候自動轉換爲數字。 – DarthJDG 2011-05-17 10:53:14

+0

@DarthJDG - 這是真的。如果他接受了你的回答,我會更喜歡,當你刪除你的初始答案時,以及在你沒有刪除之前,我發佈了這個答案。 – karim79 2011-05-17 11:10:40

1

你可以通過你的參數數組..

function Func (a){ 
    alert(a[0]+' | '+a[1]); 
    } 
    var Parameters = new Array(0,1); 
    var Function = Func; 

    $('button').click(Function(Parameters)); 
+0

謝謝,但功能正在加載本身刷新文件!有什麼建議麼? http://jsfiddle.net/divinemamgai/MMqM5/ – 2011-05-17 10:28:57

+0

這將無法正常工作。您將立即結束調用Function(Parameters),因爲它沒有被封裝爲閉包。你需要更像'$('button')。click(function(){Function(Parameters)});' - 但是,下面的'應用'建議將更加靈活。 – 2011-05-17 10:30:58

3

您可以使用function.apply()。通過您的參數列表作爲一個數組,你甚至可以設置一個範圍,如果你願意的話:

function myFunc(a,b){ 
    alert(a+", "+b); 
} 

var args = ["one", "two"]; 
var func = myFunc; 

$('button').click(function(){ 
    func.apply(this, args); 
}); 
1

這裏是另一種方式來做到這一點,我很喜歡這更好的自己,因爲它是有點自我記錄。選項列表中的每個「參數」都有一個名稱。

這是JavaScript庫中模塊選項的常見設計模式。

function Func (c){ 
alert(c.a+' | '+c.b); 
} 
var Parameters = { a : "cool", b: 123 }; 
var Function = Func; 

$('button').click(Parameters);