2012-07-14 62 views
0

我的代码中有2个函数 - makeData和displayData - 。通过jquery.html将数据传递给javascript函数()

<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函数。

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

+0

你应该重构你的整个代码,不要混用jQuery和蹩脚的内联事件,直接访问由jQuery以更好的方式提供的东西('window.event'是IE-only!) – ThiefMaster 2012-07-14 09:27:38

+0

哦,对不起我的无序代码..但我仍然是新的JavaScript和jQuery。所以现在什么方法适用于我,我写了什么。我希望我可以帮助改善。 – Ahok 2012-07-14 09:36:30

+0

我仍然没有得到你想要达到的目标。 – m02ph3u5 2012-07-14 09:40:58

回答

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对象。但我仍然希望有其他方法可以使用。因为我害怕如果我的数据集非常大,它可以减缓散文。

+1

好,不是这是我的答案... – m02ph3u5 2012-07-14 15:47:05

+0

好吧,现在我发现了一个新问题,我的答案上面..如果json /数组值有空间例如myjson [i] =“试一试”或myarray [i] =“这个值也有空格”)。它不起作用.. – Ahok 2012-07-15 03:13:57

+0

你为什么不把你的价值存储在全球? – m02ph3u5 2012-07-16 12:23:53

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/

+0

所以,我需要添加基于您的例如JSON.parse(stringRep);对?我仍然没有得到它..但让我试试你的建议.. – Ahok 2012-07-14 10:53:53

+0

hhmmm ...好吧..现在我主要了解json。但是,我仍然无法将json对象传递给displayData(),在上面写的html输入脚本中。 – Ahok 2012-07-14 12:16:00

+0

嗯,我不知道你的displayData函数是做什么的。无论如何,您必须使用displayData中的parseJson将字符串重新转换为对象。 – m02ph3u5 2012-07-14 13:02:37