2012-11-06 30 views
0

我有一个JSON的问题。它看起来是这样的 - 只是一个摘录:在另一个函数中获取JSON值

{ 
    "Pizza Margharita": { 
     "id": "0",   
     "price1": "4,50"   
    }, 
    "Pizza Caprese ": { 
     "id": "1", 
     "price1": "4,00" 
    }, 
    "Pizza Salami": { 
     "id": "2", 
     "price1": "4,00" 
    } 
} 

我的功能看起来是这样的:

$(function() { 
    $.getJSON('data/food01.json', function(data) { 

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



     $('#food01 li a').live('click', data, function(name, price) { 
      var foo = name; 
      $('#foodname h3').append(foo); 
     }); 
    }); 
}); 

随着$.each()我从JSON获取数据并追加到<li> -elements。这工作正常。现在我想获得仍包含在$ getJSON函数中的另一个函数中的值。这是可能的,或者我做错了什么?如果有人能帮助我,那就太棒了 - 非常感谢!

+4

'live'已弃用。改用'on'。 –

+0

如果你可以用你的'html'(最好是在jsbin或jsfiddle中)解释这个问题,以及你想要做什么,它将使得它更容易得到解决方案 – Abhilash

回答

0

您的功能可以访问数据,因此您无需将其传入!

$(function() { 
     $.getJSON('data/food01.json', function(data) { 

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



      $('#food01 li a').live('click', function(name, price) { 
       //you can just access data here... 
    var foo = name; 
       $('#foodname h3').append(foo); 
      }); 
     }); 

}); 
+0

有些东西闻起来很奇怪。 – Abhilash

+0

这似乎是更合适的评论,不是吗? –

+0

为什么?我更改了代码以反映更改,'data'是live函数中的一个完全有效的变量,因为它包含在getJSON函数中? – Liam

0

传递给liveon的数据参数可以通过事件的data属性来访问。这里是你如何能透过data迭代,比如一个例子:

$('#food01 li a').on('click', null, data, function(e) { 
     $.each(e.data, function(name, price){ 
      var foo = name; 
      $('#foodname h3').append(foo); 
     }); 
    }); 

我不知道你需要data做什么,但可以很容易地适应。

+0

这一个看起来更有针对性。 – Abhilash

0

这是我尝试在一个答案:

$(function() { 

    $.getJSON('data/food01.json', function(data) { 

     $.each(data, function(name, price) { 

      $('section#food01').find('ul').append('<li><a id="+order' + price.id + '" href="#order"><h3>' + name + '</h3><span>' + price.price1 + '</span></a></li>'); 

      if(/* some condition like price > 100 or name == 'Margharita'*/){ 
       $('#food01 li a').on('click', function() { 
        $('#foodname h3').append(name); 
       }); // click 

      } // if 

     }); // each 

    }); // getJSON 

}); // ready 
+0

看了一下你的答案并尝试了一些东西,可以比较一下。点击链接的索引和值的id例如“id”:“0”的JSON元素。像这样if(indexNo == price.id){}问题是我没有被点击的.index链接之前,我点击它。其他条件可能没有意义。任何想法?;)我会发布一个例子 - 等待一秒钟... – user1800141

0

它的工作原理!

$(function() { 
    $.getJSON('data/food01.json', function(data) { 

     $.each(data, function(name, price) { 
       $('section#food01').find('ul').append('<li><a id="order'+price.id+'" href="#order"><h3>'+name+'</h3><span>'+price.price1+'</span></a></li>'); 
       var foodname = name; 
       var id = price.id; 
       $('#food01 li a').live('click', function(name, price){ 
        var indexNo = $(this); 
        var indexNo2 = ($('#food01 a').index(indexNo)); 

        if(indexNo2 == id) { 
         $('#foodname h3').append(foodname); 
        }<!-- if --> 
       });<!-- /live --> 
      });<!-- /each --> 

    });<!-- /getJSON --> 
    });<!-- /function --> 
相关问题