我有一个通用的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行添加参数?
答案 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);
删除括号。