Json对象作为函数参数,怎么传递和接收

1.问题描述:每个按钮的绑定了事件传递Json对象,点击对应显示Json数据
2.代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script type="text/javascript" src="js/jquery-1.11.0.min.js" ></script>
        <style>
            .btn{
                margin: 20px;
            }
        </style>
    </head>
    <body>
    </body>
    <script>
        window.onload = function(){
            for(var i = 0;i<10;i++){
                var obj = {
                    "PersonId": i,
                    "pid": 123          
                   };
         //      obj = JSON.stringify(obj);   这里应该转化为字符串传递吗?转为字符串PersonId也变为了personid是怎么回事呢?
            var op = $('<a class="btn"  href="javascript:doChioce(' + obj + ')">选择</a>');           
            $('body').append(op);                
            }
        }
        function doChioce(obj){
        //    console.log(obj);  //点击的时候报错
        //    console.log(obj.PersonId)
        }
    </script>
</html>
阅读 21.2k
4 个回答

引号不对:JSON.stringify('foo'); // '"foo"'
根据https://developer.mozilla.org...

修改了单双引号的匹配:

        window.onload = function(){
            for(var i = 0;i<10;i++){
                var obj = {
                    "PersonId": i,
                    "pid": 123          
                   };
               obj = JSON.stringify(obj);
            var op = $("<a class='btn'  href='javascript:doChioce(" + obj + ")'>选择</a>");           
            $('body').append(op);                
            }
        }
        function doChioce(obj){
            console.log(obj);  
            console.log(obj.PersonId)
        }

最近正好碰到了这个问题,本来打算写个文章的,看到你这个问题,就直接借个楼吧,出个比较通用的解决方法

希望下面有碰到这个问题,并且用我提供的方法解决的,把这个答案顶上去,让更多的人看到,更快的解决问题

其实在js中拼接html,写方法的时候最多的就是单引号,双引号转换的问题

可以直接把json转成字符串,再用encodeURI编码,调用方法里面解码一下

具体代码如下(本次是easyui里面碰到的问题,其他应该也是类似):

html 拼接

// row 为json对象
var temp = encodeURI(JSON.stringify(row));

clipboard.png

方法调用
clipboard.png

JSON.parse(decodeURI(obj));

============================================

还有之前碰到一个坑,在这里也记一下,动态生成的html,如果用jquery绑定方法,动态方法不会执行,需要用onclick,没有代码不直观,举个例子:
页面加载后在所有button上用jquery加了点击事件监听,在后面的代码中用js生成了button按钮并加到页面上,点击js生成的按钮时并不会触发之前的点击监听事件

就写这么多吧,不擅长前端,代码也写得丑,勿喷

还有传参可以传json对象啊,转成字符串就没有PersonId属性一说了

我觉得问题不是你JSON.stringify() 发生的。

我建议把:
var op = $('<a class="btn" href="javascript:doChioce(' + obj + ')">选择</a>');
改为
var op = $('<a>',{ "href": "javascript:doChioce(" + obj + ")" })

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题