-1

我有一个创建 html 输入元素的通用 javascript 类。该代码允许我使用 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.  });

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

4

3 回答 3

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.  });
于 2012-11-15T18:04:34.367 回答
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'.
}
于 2012-11-15T18:07:25.420 回答
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);

删除括号。

于 2012-11-15T18:24:18.543 回答