1

我正在开发一个 jquery,其中用户选择一个类别,然后选择一个年份。我的问题是我得到了,cats is not defined虽然它是,我可以看到它使用alert(cats);from$('[id^="multi-"]').click(function () {

但是当我选择年份范围时,$("#multi_select_wrapper").keyup(function(){未定义“cats”变量

$('[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);
            });
4

3 回答 3

2

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

如果您希望cats在该函数之外可用,那么您必须cats在更高的范围内声明(例如,可能作为全局变量或更高的范围)。然后,它的值可以在点击处理函数运行后的任何时候使用。

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

于 2013-05-31T02:29:25.113 回答
1

问题是变量范围。您需要移出var cats = [];第一个功能

于 2013-05-31T02:29:42.410 回答
0

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

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

if (window.cats) { ... /* scope 2 */
于 2013-05-31T02:36:06.533 回答