如何将javascript对象传递给使用例如onclick指定的javascript函数

DNT

我一直在寻找以下问题的解决方案:我在javascript函数中有一个定义数据表的对象。我想将此表的行传递给使用表单元格(td元素)的onclick处理程序定义的函数,以便它可以打开带有该元素额外信息的弹出窗口。

我找到了很多解决方案,但主要涉及从php编写的字符串,然后传递给javascript。我的案例在需要上述功能的级别上不涉及任何php。

经过一些试验,我提出了以下建议。

将对象传递给内联HTML函数需要2x stringify。第一个将创建json字符串,第二个将转义所有双引号,并在开头和结尾添加双引号。然后,接收函数仅需要JSON.parse()以此方式传递的json字符串。

// JSON format for json_txt is:
//  { "column 1" : ["c1 data 1", "c1 data 2", ...],
//    "column 2" : ["c2 data 1", "c2 data 2", ...],
//    ...
//  }

function createTable(json_txt, el_id)
{
    var el = document.getElementById(el_id);
    var o = JSON.parse(json_txt);
    var s = '<table>';
    var num = numTableRows(o);  // just returns number of rows
    for (var r=0; r<num; r++)
    {
        s += '<tr class="tbl_data">';
        for (var col in o)
        {
            if (col === 'a special column name here')
            {
                var js = {};
                for (var c in o) js[c] = o[c][r];
                s += "<td onclick='onTrackShowInfo(this," + JSON.stringify(JSON.stringify(js))+" )'>";
            }
            else
                s += '<td>';

            s += o[col][r];
            s += '</td>';
        }
        s += '</tr>';
    }
    s += '</table>';
    el.innerHTML = s; 
}

....

function onTrackShowInfo(el, json_row)
{
    var o = JSON.parse(json_row);
    // ok, we have the row from element 'el' at this point
}

我将其发布在这里的一个原因是,帮助可能也在寻找类似内容的其他人,并询问是否有人对此有任何疑问,或者已针对此特定问题提出了更好的解决方案。

编辑:添加了createTable()函数的非常简化的版本,以显示该代码运行的上下文的更多信息。

JLRishe

正如@charlietfl所建议的那样,您应该摆脱在属性中使用JavaScript的习惯,并使用事件委托解决此问题:

function createTable(json_txt, el_id) {
    var el = document.getElementById(el_id);
    var o = JSON.parse(json_txt);
    var s = '<table>';
    var num = numTableRows(o);  // just returns number of rows
    var tableData = [];

    for (var r=0; r < num; r++) {
        var rowData = {};

        s += '<tr class="tbl_data">';
        for (var col in o) {
            var curVal = o[col][r];
            rowData[col] = curVal;

            s += "<td data-row='" + r + "'>" + curVal + "</td>";
        }
        s += '</tr>';

        tableData.push(rowData);
    }
    s += '</table>';
    el.innerHTML = s; 

    el.addEventListener("click", function(e) {
        var targ = e.target,
            rowNum,
            data;

        if(targ && targ.nodeName == "TD") {
            rowNum = targ.getAttribute("data-row");
            data = tableData[rowNum];
            if (data) {
                onTrackShowVal(this, data);
            }
        }
    });
}

(只是不可以,如果您使用的是jQuery,则可以像这样完成最后一部分,并且"td"可以根据需要更改字符串以提供更具体的选择器):

$(el).on("click", "td", function () {
    var rowNum = $(this).data("row"),
        data = tableData[rowNum];

    if (data) {
        onTrackShowInfo(this, data);
    }
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Javascript-如何将原始对象传递给回调函数

来自分类Dev

Javascript-如何将原始对象传递给回调函数

来自分类Dev

如何将Angular对象传递给Google Chrome扩展程序中的Javascript函数?

来自分类Dev

将 jquery 对象传递给 javascript onclick

来自分类Dev

如何将std :: bind对象传递给函数

来自分类Dev

如何将json对象传递给$ eval函数

来自分类Dev

如何将“此”对象传递给使用协议的函数中调用的回调函数

来自分类Dev

将初始化的对象传递给javascript函数

来自分类Dev

将数组对象传递给javascript函数

来自分类Dev

如何将 JSON 对象值从 HTML Onclick 函数传递给 JavaScript?MVC

来自分类Dev

如何将javascript对象传递给C#MVC 4控制器

来自分类Dev

JavaScript:如何将单个全局对象传递给一组类?

来自分类Dev

如何通过JavaScript将函数对象传递给Polymer元素

来自分类Dev

如何将参数传递给javascript onclick函数。请不要使用jquery

来自分类Dev

如何将类的对象传递给对象的类函数中的函数?

来自分类Dev

如何使用JavaScript将LatlngBounds对象传递给Node.js服务器

来自分类Dev

如何使用JavaScript将LatlngBounds对象传递给Node.js服务器

来自分类Dev

将JSON对象传递给onclick函数

来自分类Dev

将JSON对象传递给onclick函数

来自分类Dev

如何将事件对象传递给对象内的函数

来自分类Dev

如何将函数对象传递给需要void *指针的函数

来自分类Dev

如何将对象传递给单独的函数-Python

来自分类Dev

如何将对象传递给CasperJS函数

来自分类Dev

如何将对象传递给 std::accumulate 函数?

来自分类Dev

如何将JavaScript数组对象传递给Lasso脚本并将其获取到lasso变量?

来自分类Dev

Java类-如何将泛型对象传递给函数

来自分类Dev

如何将python对象传递给需要指针类型的函数

来自分类Dev

如何将超类对象传递给子类构造函数?

来自分类Dev

如何将编写的对象传递给另一个类的构造函数?

Related 相关文章

  1. 1

    Javascript-如何将原始对象传递给回调函数

  2. 2

    Javascript-如何将原始对象传递给回调函数

  3. 3

    如何将Angular对象传递给Google Chrome扩展程序中的Javascript函数?

  4. 4

    将 jquery 对象传递给 javascript onclick

  5. 5

    如何将std :: bind对象传递给函数

  6. 6

    如何将json对象传递给$ eval函数

  7. 7

    如何将“此”对象传递给使用协议的函数中调用的回调函数

  8. 8

    将初始化的对象传递给javascript函数

  9. 9

    将数组对象传递给javascript函数

  10. 10

    如何将 JSON 对象值从 HTML Onclick 函数传递给 JavaScript?MVC

  11. 11

    如何将javascript对象传递给C#MVC 4控制器

  12. 12

    JavaScript:如何将单个全局对象传递给一组类?

  13. 13

    如何通过JavaScript将函数对象传递给Polymer元素

  14. 14

    如何将参数传递给javascript onclick函数。请不要使用jquery

  15. 15

    如何将类的对象传递给对象的类函数中的函数?

  16. 16

    如何使用JavaScript将LatlngBounds对象传递给Node.js服务器

  17. 17

    如何使用JavaScript将LatlngBounds对象传递给Node.js服务器

  18. 18

    将JSON对象传递给onclick函数

  19. 19

    将JSON对象传递给onclick函数

  20. 20

    如何将事件对象传递给对象内的函数

  21. 21

    如何将函数对象传递给需要void *指针的函数

  22. 22

    如何将对象传递给单独的函数-Python

  23. 23

    如何将对象传递给CasperJS函数

  24. 24

    如何将对象传递给 std::accumulate 函数?

  25. 25

    如何将JavaScript数组对象传递给Lasso脚本并将其获取到lasso变量?

  26. 26

    Java类-如何将泛型对象传递给函数

  27. 27

    如何将python对象传递给需要指针类型的函数

  28. 28

    如何将超类对象传递给子类构造函数?

  29. 29

    如何将编写的对象传递给另一个类的构造函数?

热门标签

归档