将参数添加到动态函数

时间:2012-11-15 17:58:08

标签: javascript

我有一个通用的javascript类,可以创建一个html输入元素。代码允许我将函数作为字符串传递,只要元素的值发生变化,就会使用jQuery的change方法调用该函数。我正在使用以下代码:

1.  var changeFunction = "runThisCode()";
2.  
3.  var elem = $("<input/>").attr(id: someID, type: "text", size: 20);
4.  elem.change(function () {
5.     var fn = new Function(changeFunction);
6.     fn();
7.  });

我想在change函数中传递元素的id。有没有办法在第5行或第6行添加参数?

3 个答案:

答案 0 :(得分:1)

您可以在Function中提供参数名称,该名称将在创建的函数体中提供。 jsfiddle

1.  var changeFunction = "runThisCode(id)";
2.  
3.  var elem = $("<input/>").attr(id: someID, type: "text", size: 20);
4.  elem.change(function () {
5.     var fn = new Function("id", changeFunction);
6.     fn(someID);
7.  });

答案 1 :(得分:0)

var changeFunction = runThisCode;

var elem = $("<input/>").attr(id: someID, type: "text", size: 20);
elem.change(function () {
    changeFunction(this.id);
});

真。无需使用字符串将函数存储在变量中。这很糟糕,我刚给你看的解决办法很好。

实际上,如果代码确实按照显示的顺序,您可以执行以下操作:

var elem = $("<input/>").attr(id: someID, type: "text", size: 20);
elem.change(runThisCode);

function runThisCode() {
    // 'this.id' gives you the ID.
    // And so does 'someID'.
}

答案 2 :(得分:0)

为什么不简单呢?

var changeFunction = "runThisCode";
var elem = $("<input/>").attr(id: someID, type: "text", size: 20);
elem.change(function () { window[changeFunction](this.id) });

如果你不能像这样直接拥有你的changeFunction,你可以这样做

var changeFunction = changeFunction.slice(0, -2);

删除括号。