2013-05-31 247 views
1

我正在寻找一个jQuery,用户选择一个类别,然后选择一个年份范围。 我的问题是我得到cats is not defined虽然它,我可以用它从alert(cats);$('[id^="multi-"]').click(function() {变量未定义

看到,但是当我选择的年的范围内,从$("#multi_select_wrapper").keyup(function(){“猫”变量没有定义

$('[id^="multi-"]').click(function() { 
      $(this).toggleClass('selected'); 
      var cats = []; 
      $(".selected").each(function(){ 
       cats.push($(this).attr('data-id')); 
      }); 
      var cats = cats.join(","); 
      alert(cats); 
    }); 

      $("#multi_select_wrapper").keyup(function(){ 
        if(f_year!==null && t_year!==null){ 
          var years = []; 
          var counter = parseInt(t_year)+1; 

          for (var i = f_year; i < counter; i++) { 
            years.push(i); 
          } 
          alert(years); 
          alert(cats); 
        } 
        $("#multi_search").attr("href", "index.php?do=m&msc=" + cats + "&msy=" + years); 
      }); 
+3

我不是jquery的专家,但我已经用javascript做了一点。我看到的是'cats'在与'alertup(cats)'不同的范围内声明;''keyup'事件中'' – Isaac

+0

请在下次尝试谷歌 –

+0

@ScottSelby:您认为有多少相关结果“猫没有定义”会给? – Blender

回答

2

cats仅在您的点击处理程序函数中声明,并且在该点击处理程序运行之前不会被赋予值。它的价值仅在该功能中可用。

如果您想在该函数外部使用cats,则必须在更高范围(例如,可能是全局变量或某个更高范围)声明cats。然后,它的值可以在点击处理函数运行后的任何时候使用。

此外,您不应该在点击处理程序中声明cats变量两次。这不会导致错误,但它是不正确的。每个范围只能用var声明一次。

1

问题是变量作用域。您需要将var cats = [];移至第一个函数之外

0

实际上,如果您愿意,可以通过将函数附加到窗口对象来定义全局可访问的变量。

window.cats = []; /* scope 1 */ 

if (window.cats) { ... /* scope 2 */