6

私はjavascript関数からカスタムjsonオブジェクトを返そうとしています。私のコードは以下の通りです

フィドル

html

<input type='checkbox' name='chk[]' value='1'>1
<input type='checkbox' name='chk[]' value='2'>2
<input type='text' id='txt' value='' />
<input id='btn' type='button' value='click' />​

js

var json = {};

$('#btn').click(function(){
  console.log(getdata());
});
function getdata(){
  $('input:checked').each(function(i){
      json.chk = $(this).val();
      //json.chk.push({"val": $(this).val()}); gives error Uncaught TypeError: Cannot call method 'push' of undefined
  });

  json.txt = document.getElementById("txt").value;

 return json;
}

以下のような結果が必要です

{
  chk: [{val: 1}, {val: 2}],
  txt: 'test'
};
4

2 に答える 2

6

json オブジェクトで chk 変数を定義する必要があります。chk は定義されていないため、配列であることがわかりません。

var json = {};

$('#btn').click(function(){
    console.log(getdata());
});
function getdata(){

    json.chk = [];
    $('input:checked').each(function(i){
        json.chk.push({ val : $(this).val()});
    });

    json.txt = document.getElementById("txt").value;

    return json;
}
​
于 2012-11-08T06:06:27.890 に答える
2

chk は配列として定義されていません。最初に配列として定義してから、値を配列にプッシュする必要があります。

var json = {};

    $('#btn').click(function(){
      console.log(getdata());
    });
    function getdata(){
      $('input:checked').each(function(i){
         if(json.chk)
        {
            json.chk.push({val:$(this).val()})
        }
        else
        {
            json.chk=[];
            json.chk.push({val:$(this).val()})
        }
      });

      json.txt = document.getElementById("txt").value;

     return json;
    }
于 2012-11-09T05:00:46.980 に答える