如何将变量从外循环传递给函数

时间:2017-04-04 04:47:41

标签: javascript jquery

我需要能够在“$(”#brand“)。html”部分底部使用x变量

for (x = 0; x < productList.length; x++){
    $("#drug" + x).html("<h2>"+ productList[x].brandName + "</h2>");

     $("#drug" + x).click(function(){
        $.getJSON("pharmaceutical.json", function() {
             alert(productList, x);
            drugData = data.pharmaceutical.products;
            $("#brand").html(drugData[x].brandName);
        });
     });
}

我一直在控制台中收到此错误

未捕获的ReferenceError:未定义数据

我相信这是因为x不在同一范围内。

任何帮助都会很棒!!!

2 个答案:

答案 0 :(得分:0)

你可以创建一个闭包&amp;参考变量。 希望这段代码有用(未经过测试)。

for (x = 0; x < productList.length; x++) {
  $("#drug" + x).html("<h2>" + productList[x].brandName + "</h2>");
  // creating a closure
  (function(i) {
    $("#drug" + i).click(function() {
      $.getJSON("pharmaceutical.json", function() {
        alert(productList, i);
        drugData = data.pharmaceutical.products;
        $("#brand").html("hello" + drugData[i].brandName);
      });
    });
  }(x))

}

答案 1 :(得分:0)

我建议你改为:

for (x = 0; x < productList.length; x++) {
  $("#drug" + x).html("<h2>" + productList[x].brandName + "</h2>");
}
$("[id^='drug']").click(function() { //<----gives you all the nodes with id="drug1"..
  var x = this.id.match(/[0-9]+/)[0]; // you can get it this way
  $.getJSON("pharmaceutical.json", function(data) { // <----get the response
    alert(productList, x);
    drugData = data.pharmaceutical.products; // find the specific one
    $("#brand").html(drugData[x].brandName); // place it in the DOM
  });
});