使用关联数组中的数据作为事件处理程序的对象

时间:2011-09-23 14:18:03

标签: jquery arrays dynamic associative each

下午全部

我有一些数据 -

    var searchwithin = [
{id:"clearwithin", type:"button"},
    {id:"search_radius", type:"select"},
    {id:"for_lease" ,type:"checkbox"},
{id:"for_sale", type:"checkbox"},
]; 

它将根据点击的内容显示和隐藏信息(这只是数据的一小部分。

我已经研究过如何检查type属性,我想知道的是:

如果类型是按钮,我如何访问这些项的id值,然后生成一个click函数,以便使用id作为按钮的名称来关联该函数。

提前致谢

菲尔

2 个答案:

答案 0 :(得分:0)

连接'#'和id属性,并使用结果字符串作为选择器。

$.each($.grep(searchwithin, function(i) { return i.type=='button'; }), 
    function () { 
        var item = this;
        $('#'+this.id).bind('click', function(e) {
            alert('clicked: ' + item.id +' '+ item.type);
        });
    });

考虑使用选择器来查找元素而不是ID映射。

$('input[type="button"].search').bind('click', onSearch);

答案 1 :(得分:0)

首先,通过删除表中最后一项之后的逗号来修复searchwithin表中的语法错误。这将导致IE6 / IE7中的错误。

然后,您可以使用此代码查看searchwithin数组,找到相应id的{​​{1}},然后为type设置点击事件处理程序

id

我注意到您的表有两个var searchwithin = [ {id:"clearwithin", type:"button"}, {id:"search_radius", type:"select"}, {id:"for_lease" ,type:"checkbox"}, {id:"for_sale", type:"checkbox"} ]; function findIdByType(target) { for (var i = 0; i < searchwithin.length; i++) { if (searchwithin[i].type === target) { return(searchwithin[i].id); } } } var id = findIdByType("button"); if (id) { $("#" + id).click(function() { // do whatever you want to do on the click function here } }); 条目。上述代码建议仅返回并在第一个条目上运行。如果要为这两个ID设置单击处理程序,则必须修改代码或表。如果这是用于的所有表,则可以将其更改为选择器(可以包含多个id),如下所示:

type:checkbox