将动态生成的对象数组传递给onclick处理程序

时间:2015-09-09 13:13:18

标签: javascript jquery json javascript-events

我正在动态生成[3,5]处理程序并使用onclick方法进行设置。

attr

使用此代码时,var originReference = "myDynamicString"; var stringArray = []; stringArray.push("Data1"); stringArray.push("Data2"); var objArray = []; objArray.push({name: "Category 1", y: 10}); objArray.push({name: "Category 2", y: 20}); onclickReference.attr("onclick", "drawChart('" + originReference + "',[" + stringArray + "],[" + objArray + "]); return false;"); 未正确传递给处理程序事件,因为我收到错误: objArray。仅使用字符串数组(无JSON)。数据很好地传递给处理程序。

如何在"SyntaxError: missing ] after element list"处理程序中格式化对象数组?

2 个答案:

答案 0 :(得分:2)

不要使用onclick属性来绑定事件。使用addEventListener添加活动。

onclickReference.click(function(){
    drawChart(originReference, stringArray, jsonArray);
    return false;
});

编辑:根据您的评论,您在循环中绑定事件。在这种情况下,您需要创建一个闭包来“捕获”变量的值。

试试这个:

onclickReference.each(function(){
    // Define your variables inside this new scope
    var originReference = "myDynamicString";
    var stringArray = [];
    var objArray = [];

    this.click(function(){
        drawChart(originReference, stringArray, jsonArray);
        return false;
    });
});

答案 1 :(得分:2)

您应该使用JSON.stringify将您的javascript对象转换为json字符串。

onclickReference.attr("onclick", "drawChart('" + originReference + "'," + JSON.stringify(stringArray) + "," + JSON.stringify(jsonArray) + "); return false;");

但正如@Rocket Hazmat所说,使用onclick属性是一种不好的事件绑定方式。