javascript - 在循环中创建的 anchor 标记上绑定(bind)一个带有对象作为参数的 onclick 函数

标签 javascript jquery object jquery-events

我正在获取一些 JSON 数据,我正在循环遍历它,我正在为每个数据创建一个 Anchor 标记和 onClick,我试图调用一个以对象作为参数的函数。

像这样:

$.getJSON('/ui_dashboard/rest/getAlertDefVsAlertValues',function(data) {    
        console.log(data)
        $("#checkAllAlertsTbody").empty();
        var mailServerTbody="";
        var objData = data.getAlertDefVsAlertValues;
        var objLen = objData.length;
        
        for(var i=0;i<objLen;i++){      
            //one object for all the key in the json 
            var alertWholeObject = {
                    alertFunctionId : objData[i].alertFunctionId,
                    alertMessage : objData[i].alertMessage,
                    definitionName:objData[i].definitionName,
                    emailMessage : objData[i].emailMessage,
                    emailSubject:objData[i].emailSubject,
                    emailTemplate : objData[i].emailTemplate,
                    hubId:objData[i].hubId,
                    id : objData[i].id,
                    isDefinitionEnabled:objData[i].isDefinitionEnabled,
                    mandatoryParam : objData[i].mandatoryParam,
                    scanInterval:objData[i].scanInterval,
                    smsMessage : objData[i].smsMessage,
                    smsTemplateId:objData[i].smsTemplateId,
                    tenantId : objData[i].tenantId,
                    timestamp:objData[i].timestamp,
                    list: objData[i].list,
                    isArray : function(what){
                        return Object.prototype.toString.call(what) === '[object Array]';
                    }
            };
        console.log(alertWholeObject.alertMessage)
            var idWithoutSpace = alertWholeObject.id.replace(/ /g, '');
            //for overview table
                mailServerTbody = '<tr><td>'+(i+1)+'</td><td>'+alertWholeObject.definitionName+'</td><td>'+alertWholeObject.timestamp+'</td><td>'+
                '<div class="controls center">'+
                '<a class="btn btn-info btn-mini"  id="edit_'+idWithoutSpace+'" onclick="editAlertRules(' + alertWholeObject + ');"><i class="icon-edit icon-white">&nbsp;&nbsp;&nbsp;&nbsp;</i></a>'+
                '<a class="btn btn-danger btn-mini" id="delete_'+idWithoutSpace+'" ><i class="icon-trash icon-white">&nbsp;&nbsp;&nbsp;&nbsp;</i></a>'+
                '</div></td></tr>'; 
            $("#checkAllAlertsTbody").append(mailServerTbody);
        }
        
    });
}

但是onclick 函数不起作用;在控制台中它只显示 [object object]

如何将在循环中创建的这个对象发送到每个 anchor 标记的点击?

请帮忙。

最佳答案

已编辑:

抱歉,我草草了事。这是更新:

不要将对象作为参数传递。而是传递一个索引。声明一个具有外部作用域(或全局作用域)的对象数组。

var obj = [];

在您的 for 循环中,在该数组中的当前索引处实例化一个对象:

for (i=0; ....) {
    obj[i] = new Object;
...

}

现在,当您指定内联 onclick 时,只需传递索引:

mailServerTbody = "... <a ... onclick='editAlertRules(" + i + ");'" ...</a>.."

在您的函数 editAlertRules 中使用外部作用域中的对象并将索引作为参数:

function editAlertRules(index) {

console.log(obj[index]);
...
}

检查这个 fiddle 来了解这个想法:http://jsfiddle.net/n8hSJ/1/

希望对您有所帮助。

关于javascript - 在循环中创建的 anchor 标记上绑定(bind)一个带有对象作为参数的 onclick 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19226236/

相关文章:

javascript - 如何将 Sequelize 总和作为 json 返回?

javascript - jQuery off() 不删除点击处理程序

javascript - 动态添加的具有给定值的文本框未正确添加,jquery

java - 使用 gson 序列化嵌套类 null 对象?

javascript - react : Static method always returns undefined

javascript - For 循环不开始

javascript - 当 firebug 说它是 34 时,为什么 jquery 会为 offsetHeight 返回 0?

javascript - 使用 CSS 类,但无法找到它的定义位置

javascript 字符串到对象

javascript - 从 JavaScript 数组中的对象键获取值