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

时间:2018-03-23 06:57:09

标签: 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].cfunction + "'>" + data.result.list[i].cvalue + "</a>" + "</td>");
    tr.append("<td>" + + "</td>");
    table.append(tr);
}

data.result.list[i].cfunction有一个像"getMyMethod('My parameter')"这样的字符串值,它基本上是用引号中的参数调用方法。 但是在jQuery将其解析为onclick函数后,它的值会更改为onclick="getMyMethod(" my="" parameter')'=""

这是生成的html:

<a onclick="getMyMethod(" my="" parameter')'="" >My Value</a>

有人能让我朝着正确的方向前进吗?

5 个答案:

答案 0 :(得分:1)

您需要转发内部双引号"

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

答案 1 :(得分:1)

你应该用以下代码修改代码:

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

答案 2 :(得分:1)

更改此行

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

到这个

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

答案 3 :(得分:1)

您可以修改数据中的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);
};

答案 4 :(得分:1)

你能试试吗?并确保您的spinner_country.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { Country country = (Country) parent.getSelectedItem(); Toast.makeText(context, "Country ID: "+country.getId()+", Country Name : "+country.getName(), Toast.LENGTH_SHORT).show(); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); data.result.list[i].cfunction

"getMyMethod('My parameter')"