0

我的代码中有 2 个函数 - makeData 和 displayData -。

<script type="text/javascript">
    function makeData(){
        var myjson = {}; var myarray = [];
        for (var i = 0; i < 10; i++){ 
           myjson[i] = "json"+i; 
           myarray[i] = "array"+i;
        }

        //when i pass myjson[1] and myarray[1] value, it's work for me
        $("#mydiv").html("<input type=\"button\" value=\"display data\" 
              onclick=displayData(\""+myjson[0]+"\",\""+myarray[0]+"\") />");
        /*but when i tried to pass the json and array object, i got problem here.
          displayData() function cannot read those objects*/
        $("#mydiv").html("<input type=\"button\" value=\"display data\" 
              onclick=displayData(\""+myjson+"\",\""+myarray+"\") />");

    }
</script>
<input type="button" value="make some button" onclick="makeData()" />
<div id="mydiv"></div>
<div id="dataDisplay"></div>

我如何将数组/json对象传递给使用innerHTML编写的javascript函数???

注意:我的目的是将一组数据传递给 javascript 函数。

编辑:我认为现在更清楚了。对不起之前..

4

2 回答 2

1

您可以将您的对象或数组转换为字符串表示 (JSON) 以将其写入 DOM(例如,作为您调用 onclick 的函数的参数)。

给我 10 分钟写一个更好的例子。这里是。它并不完美(例如,索引似乎是“字符串”类型,即使实际上是“数字”),但它应该涵盖大多数情况。请注意,您不能使用此示例转换函数或引用:

function convertObjectToString( obj )
{
    var stringRep = "{";

    for ( var index in obj)
    {       
        var cIndex;
        if ( typeof index == "number" ) // int index
            cIndex = index;    
        else // string index
            cIndex = "\"" + index + "\"";

        if ( typeof obj[index] == "object" )
            stringRep += cIndex + ":" + convertObjectToString( 
                            obj[index] ) + ","; // convert recursively
        else if ( typeof obj[index] == "number" )
            stringRep += cIndex + ":" + obj[index] + ",";
        else
            stringRep += cIndex + ":\"" + obj[index] + "\","; 

    }
    // remove trailing comma (if not empty)
    if ( stringRep.length > 1 )
        stringRep = stringRep.substr(0, stringRep.length - 1);
    stringRep += "}";
    return stringRep;
}

或者最好只使用 JSON.stringify 函数!https://developer.mozilla.org/En/Using_native_JSON/

于 2012-07-14T10:32:57.713 回答
0

我想我已经找到了我的问题的答案。这是修改后的代码:

function buatdata(){
    var myjson={};
    var myarray= [];
    for(var i = 0 ; i < 10 ; i++){
        myjson[i] = "json"+i;
        myarray[i] = "array"+i;
    }
    var arraystring = myarray.toString().replace(\,\g,"&#44;");
    var jsonstring = JSON.stringify(myjson).replace(\"\g,"&quot;");

    /* i changed " to ' to wrap parameter that i passed in tampildata() function 
        and i convert those object to string first.*/

    $("#tombol").html("<input type=\"button\" value=\"display\" 
          onclick=tampildata('"+jsonstring+"','"+arraystring+"') />");
}
function tampildata(getjson,getarray){
    //i changed string that i passed back to object, so i get what i want.
    var myarray = getarray.split(',');
    var myjson = JSON.parse(getjson);
}

使用该功能,我通过数组和 json 对象。但我仍然希望我可以使用其他方法。因为我害怕如果我的数据集非常大,它会减慢散文的速度。

于 2012-07-14T13:03:49.740 回答