2013-05-31 4 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' объявлен в другой области для' alert (cats); 'в событии' keyup' – Isaac

+0

, пожалуйста, попробуйте google в следующий раз –

+0

@ScottSelby: Сколько релевантных результатов вы считаете «кошки не определены», дам? – Blender

ответ

2

cats только объявляется внутри вашей функции обработчика кликов и не получает значения до тех пор, пока этот обработчик кликов не запустится. Это значение доступно только внутри этой функции.

Если вы хотите, чтобы cats был доступен вне этой функции, вы должны объявить cats с более высокой областью действия (например, возможно, как глобальная переменная или более высокая область видимости). Затем, это значение может быть использовано в любое время ПОСЛЕ выполнения функции обработчика кликов.

Кроме того, вы не должны декларировать переменную cats дважды в обработчике кликов. Это не приведет к ошибке, но это неверно. Объявите его с var только один раз для каждой области.

1

Проблема заключается в области переменных. Вам нужно переместить var cats = []; за пределы первой функции

0

Вы действительно можете, если хотите, определить глобально доступные переменные из функции, добавив их в объект окна.

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

if (window.cats) { ... /* scope 2 */ 
Смежные вопросы