2012-06-08 2 views
1
$("#div").click(function(){ 
$('#myselect').change(function() { 
    var names = []; 
    $('.checkbox input').each(function() { 
      if(this.value != ''){ 
       names.push(this.value); 
       } 
      }); 
    console.log(names); 
    }); 
}); 

Мне нужно использовать names вне этой функции, чтобы использовать его для другой функции. Может ли кто-нибудь сказать мне, как это сделать?Как я могу получить массив вне функции?

$("#dropdown").change(function(){ 
    console.log(names); 
}); 

names - это массив.

+0

Какая у вас еще функция? Какую цель вы пытаетесь достичь? –

+0

И причина, по которой вы не можете переместить массив во внешнюю область видимости ...? чтобы они обменивались одинаковой областью, помещая их в один и тот же готовый обработчик, и массив должен быть объявлен в верхней части готового обработчика. – gdoron

+0

Вы добавляете событие изменения внутри события click, что означает, что вам сначала нужно щелкнуть элемент #div, а затем изменить значение в элементе управления #myselect для заполняемого массива. Это действительно то, что вы хотите, поскольку то, что вы делаете внутри события изменения, не зависит ни от элемента #div, ни от элемента управления #myselect? – Guffa

ответ

1

Вы имеете в виду, как это:

Пожалуйста, дайте мне знать, если я пропустил что-нибудь.

В противном случае надеюсь, что это помогает,

Код

var names = []; // Move the name array to outer scope 

$("#div").click(function(){ 

    $('#myselect').change(function() { 

     $('.checkbox input').each(function() { 
      if(this.value != ''){ 
       names.push(this.value); 
      } 
     }); 
     console.log(names); 
    }); 

    alert(names); 
}); 
+0

Я пытаюсь это сделать, но это не работает для меня ... BTW благодарит за ваш ответ! – vnpnlz

+0

Не беспокойтесь, bruv, Хм. Он должен прокрутить, вы можете щелкнуть мне свой HTML. Я сделаю вам ** демо **? :) –

+0

Я только что редактировал мой код выше ... Я хочу использовать это имя var на другом событии – vnpnlz

3

Определение "имена" вне функции ...

var names = []; 

    $('#myselect').change(function() { 

     $('.checkbox input').each(function() { 
       if(this.value != ''){ 
        names.push(this.value); 
        } 
       }); 
     console.log(names); 
     }); 
2

Вы должны вызвать другую функцию от этого change- обработчик события. Определение массива вне его не имеет смысла, оно связано с этим событием.

function gotNewNames(names) { 
    // do something every time the value changes 
} 

$("#div").click(function(){ 
    $('#myselect').change(function() { 
     var names = []; 
     $('.checkbox input').each(function() { 
      if(this.value != ''){ 
       names.push(this.value); 
      } 
     }); 
     gotNewNames(names); 
    }); 
}); 

Если вам просто нужно, чтобы быть в состоянии получить текущие значения где-то еще, вы должны объявить переменную в более высоком объеме, например, в обработчике кликов:

$("#div").click(function(){ 
    var names; 
    $('#myselect').change(function() { 
     names = []; // don't forget to reset before filling 
     $('.checkbox input').each(function() { 
      if(this.value != ''){ 
       names.push(this.value); 
      } 
     }); 
    }); 
    $("#dropdown").change(function(){ 
     console.log(names); 
    }); 
}); 
+0

+1 Похоже, что простейшие решения часто забываются (речь идет о параметрах функции). –

Смежные вопросы