我正在开发一个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);
});
答案 0 :(得分:2)
cats
仅在您的单击处理函数中声明,并且在该单击处理程序运行之前不会给出值。它的值仅在该函数内可用。
如果您希望cats
在该函数之外可用,则必须在更高的范围内声明cats
(例如,可能是全局变量或更高的范围)。然后,在点击处理函数运行后的任何时候都可以使用它的值。
此外,您不应该在点击处理程序中两次声明cats
变量。这不会导致错误,但是不正确。每个范围只用var
声明一次。
答案 1 :(得分:1)
问题是变量范围。您需要将var cats = [];
移到第一个函数
答案 2 :(得分:0)
如果您愿意,您实际上可以通过将它们附加到窗口对象来定义函数内的全局可访问变量。
window.cats = []; /* scope 1 */
if (window.cats) { ... /* scope 2 */