2

私はすでにたくさんのサイトとスレッドを調べましたが、私の問題に対する答えを見つけることができませんでした。

私のJSONは次のようになります:

{
    "Pizza Margharita": {
        "price1": "4,50 €"
    },
    "Pizza Caprese ": {
        "price1": "4,00 €"
    }    
}

私のjquery関数は次のようになります:

  $(function() {
    $.getJSON('data/food01.json', function(data) {
      $.each(data, function(name, price) {
        $('section#food01').find('ul').append('<li><a href="#order"><h3>'+name+'</h3><span>'+price.price1+'</span></a></li>');
      });

    });
    var food01size = $('#food01 ul li a').length;
    $('#food01 li a').live('click',function(){
      alert(food01size);

    });
  });

liまたは要素の.lengthを取得する必要があります。foodsize01の値は常に「0」です。これは、データが非同期でロードされるためです。

誰かが問題は何だと思いますか?

4

2 に答える 2

1

あなたが言ったように、問題はデータを非同期にロードしているためです。要素が追加される前にカウントが発生しています。そのコードを成功のコールバック関数に移動する必要があります。

  $(function() {
    $.getJSON('data/food01.json', function(data) {
      $.each(data, function(name, price) {
        $('section#food01').find('ul').append('<li><a href="#order"><h3>'+name+'</h3><span>'+price.price1+'</span></a></li>');
      });
      var food01size = $('#food01 ul li a').length;
      $('#food01 li a').live('click',function(){
        alert(food01size);
      });
    });
  });
于 2012-11-05T13:43:33.917 に答える
0

food01size を 0 として宣言し、getJSON の完全な関数内に設定します。

  $(function() {
    var food01size = 0; //original declaration
    $.getJSON('data/food01.json', function(data) {
      $.each(data, function(name, price) {
        $('section#food01').find('ul').append('<li><a href="#order"><h3>'+name+'</h3><span>'+price.price1+'</span></a></li>');
      });
      food01size = $('#food01 ul li a').length;//set new value
    });
    $('#food01 li a').live('click',function(){
      alert(food01size);
    });
  });
于 2012-11-05T13:43:09.687 に答える