0

コードには makeData と displayData の 2 つの関数があります。

<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>

innerHTMLを使用して書き込むjavascript関数に配列/ jsonオブジェクトを渡すにはどうすればよいですか???

注:私の目的は、一連のデータを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 に答える