Javascript 如何将字符串正确解析为onclick方法

Javascript 如何将字符串正确解析为onclick方法,javascript,jquery,Javascript,Jquery,我有一个使用jquery创建的动态表。我面临的问题是,jquery干扰了我的字符串,因此无法将其正确解析为onclick方法 for (var i = 0; i < data.result.list.length; i++) { var tr = $("<tr></tr>"); tr.append("<td>" + "<a onclick='" + data.result.list[i

我有一个使用jquery创建的动态表。我面临的问题是,jquery干扰了我的字符串,因此无法将其正确解析为onclick方法

for (var i = 0; i < data.result.list.length; i++) 
{
    var tr = $("<tr></tr>");                       
    tr.append("<td>" + "<a onclick='" + data.result.list[i].cfunction + "'>" + data.result.list[i].cvalue + "</a>" + "</td>");
    tr.append("<td>" + + "</td>");
    table.append(tr);
}

有人能告诉我正确的方向吗?

您需要对内部双引号进行转义

var func = data.result.list[i].cfunction.replace( /"/g, "\\\"" );
tr.append("<td>" + "<a onclick='" + func + "'>" + data.result.list[i].cvalue + "</a>" + "</td>");

您需要对内部双引号进行转义

var func = data.result.list[i].cfunction.replace( /"/g, "\\\"" );
tr.append("<td>" + "<a onclick='" + func + "'>" + data.result.list[i].cvalue + "</a>" + "</td>");

您应该使用以下命令修改代码:

tr.append(
    $("<td></<td>").append(
        $("<a></a>")
            .attr({
                "href" : "#"
            })
            .text(data.result.list[i].cvalue)
            .attr({
                "onclick" : data.result.list[i].cfunction
            })
    )
);

您应该使用以下命令修改代码:

tr.append(
    $("<td></<td>").append(
        $("<a></a>")
            .attr({
                "href" : "#"
            })
            .text(data.result.list[i].cvalue)
            .attr({
                "onclick" : data.result.list[i].cfunction
            })
    )
);
换行

  "<a onclick='" + data.result.list[i].cfunction + "'>"
对此

  '<a onclick="' + data.result.list[i].cfunction + '">'
换行

  "<a onclick='" + data.result.list[i].cfunction + "'>"
对此

  '<a onclick="' + data.result.list[i].cfunction + '">'

您可以修改数据中的cfunction项,如以下编码:

cfunction: "getMyMethod(\"My parameter\")",
这在控制台中起作用。请确保表ID存在:

var data = {
    result: {
        list: [
            {
                cfunction: "getMyMethod(\"My parameter 1\")",
                cvalue: "1"
            },
            {
                cfunction: "getMyMethod(\"My parameter 2\")",
                cvalue: "2"
            }
        ]
    }
}

var table = $("#testTable");

for (var i = 0; i < data.result.list.length; i++) {
    var tr = $("<tr></tr>");                       
    tr.append("<td>" + "<a onclick='" + data.result.list[i].cfunction + "'>" + data.result.list[i].cvalue + "</a>" + "</td>");
    tr.append("<td>" + + "</td>");
    table.append(tr);
}

var getMyMethod = function (funcParam) {
    console.log(funcParam);
};

您可以修改数据中的cfunction项,如以下编码:

cfunction: "getMyMethod(\"My parameter\")",
这在控制台中起作用。请确保表ID存在:

var data = {
    result: {
        list: [
            {
                cfunction: "getMyMethod(\"My parameter 1\")",
                cvalue: "1"
            },
            {
                cfunction: "getMyMethod(\"My parameter 2\")",
                cvalue: "2"
            }
        ]
    }
}

var table = $("#testTable");

for (var i = 0; i < data.result.list.length; i++) {
    var tr = $("<tr></tr>");                       
    tr.append("<td>" + "<a onclick='" + data.result.list[i].cfunction + "'>" + data.result.list[i].cvalue + "</a>" + "</td>");
    tr.append("<td>" + + "</td>");
    table.append(tr);
}

var getMyMethod = function (funcParam) {
    console.log(funcParam);
};

你能试试这个吗。并确保您的data.result.list[i].cfunction值为 getMyMethod“我的参数”


你能试试这个吗。并确保您的data.result.list[i].cfunction值为 getMyMethod“我的参数”


您能显示生成的HTML吗?请发布有关如何获取数据的代码。通过Ajax调用???@31piy我添加了它。你认为它清楚吗?你能记录data.result.list[i].c函数吗?像alert\Hello一样使用escape;您能显示生成的HTML吗?请发布有关如何获取数据的代码。通过Ajax调用???@31piy我添加了它。你认为它清楚吗?你能记录data.result.list[i].c函数吗?像alert\Hello一样使用escape;您好,在我将其解析为onclick函数时,正在生成内部双引号。首先没有内部双引号。您好,在我将其解析为onclick函数时,正在生成内部双引号。首先,没有内部双引号。虽然我已将另一个答案标记为已接受,但我发现此方法更具可读性和更好,非常感谢提供此方法。虽然我已将另一个答案标记为已接受,但我发现此方法更具可读性和更好,非常感谢提供此方法。