如何将函数绑定到数组中的每个对象?

时间:2011-06-21 18:56:37

标签: javascript jquery arrays function eval

问题标题可能不是很清楚甚至不准确。但是,这就是我想要做的。

我想要一个对象数组。每个对象都是一个按钮。我想将预定义函数绑定到每个按钮。代码示例为here

目前,我正在使用eval(),但我知道它很慢,并且由于安全原因而被认为是不好的做法。并且它不起作用,因为eval()函数将立即执行并调用已声明的2个函数。

有人可以建议我实现目标的最佳方法是什么?

由于

3 个答案:

答案 0 :(得分:3)

在这里修复了它:http://jsfiddle.net/tAZvz/2/

基本上FishBasketGordo关于存储函数的内容,但你必须使用jQuery的click函数绑定事件,而不是分配给onclick,因为它们是包装元素。


var func1 = function() { alert("Function 1 is called");}
var func2 = function() { alert("Function 2 is called");}

var myArray = [{id:"bt1", value:"+", func: func1},
               {id:"bt2", value:"-", func: func2}];


$(function(){
    for(var i=0;i<myArray.length;i++){
       var button = $('<input type="button">');
       button.attr('id',myArray[i].id).attr('value',myArray[i].value);

       button.click(myArray[i].func);

       $('#test').append(button);
    }
});

答案 1 :(得分:1)

只需将该函数存储在数组中即可。

var myArray = [{id:"bt1", value:"+", func: func1 },
               {id:"bt2", value:"-", func: func2 }];

然后设置click事件处理程序:

button.click(myArray[i].func);

答案 2 :(得分:1)

您可以将代码缩短为:

var func1 = function() { alert("Function 1 is called");}
var func2 = function() { alert("Function 2 is called");}

    // changed property name ----------v
var myArray = [{id:"bt1", value:"+", click: func1},
               {id:"bt2", value:"-", click: func2}];

$(function(){
    $.each( myArray, function(i,v) {
       $('<input>',$.extend({},v,{type:"button"})).appendTo('#test');
    });
});

示例: http://jsfiddle.net/yLPsK/

我使用jQuery.each()[docs]方法迭代你的数组。

然后我使用jQuery.extend()[docs]方法使用您创建的对象(将func更改为click)以及使用type:"button"的另一个对象扩展空对象info,并将结果作为第二个参数传递给jQuery()[docs]方法。

如果您向阵列中的每个对象添加type:"button",则可以摆脱$.extend

var func1 = function() { alert("Function 1 is called");}
var func2 = function() { alert("Function 2 is called");}

    // changed property name ----------v
var myArray = [{id:"bt1", value:"+", click: func1, type:"button"},
               {id:"bt2", value:"-", click: func2, type:"button"}];
    // added the "type" property -------------------^

$(function(){
    $.each( myArray, function(i,v) {
       $('<input>', v).appendTo('#test');
    });
});

示例: http://jsfiddle.net/yLPsK/1/