2011-05-17 61 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);