Javascript函数有效,但返回undefined

时间:2014-05-25 03:10:10

标签: javascript jquery arrays object return

我正在尝试构建一个函数,在我的页面中使用'filter'rel查找所有元素,然后将它们添加到js对象。

当我在函数中使用console.log时,函数本身似乎工作正常,但是,当我尝试在任何地方调用函数时,它返回undefined。我意识到这是异步调用的一个常见问题,但我不认为这是这种情况:

function getFilters() {
jQuery(document).ready(function($) {
    var filters = new Array();
    $("[rel=filter]").each(function(i,e){
        var type = $(e).attr('type');
        if(type == 'checkbox') { if($(e).is(':checked')) var val = $(e).prop('checked'); }
        else if(type == 'radio') { if($(e).is(':checked')) var val = $(e).val(); }
        else var val = $(e).val();
        if(val) filters.push({name : $(e).attr('name'), value : val});
    });
    return filters;
});
}

再次,当我运行console.log(过滤器);代替回收过滤器;我的数据拉得很好。当我尝试返回它时,它只会导致未定义。非常感谢任何帮助。

3 个答案:

答案 0 :(得分:4)

如果您希望getFilters()返回一个值,那就是您的问题。所有getFilters()都会注册一个事件处理程序(它不会返回任何内容)。

你可能想要这样的东西:

function getFilters() {
    var filters = new Array();
    $("[rel=filter]").each(function(i,e){
        var type = $(e).attr('type');
        if(type == 'checkbox') { if($(e).is(':checked')) var val = $(e).prop('checked'); }
        else if(type == 'radio') { if($(e).is(':checked')) var val = $(e).val(); }
        else var val = $(e).val();
        if(val) filters.push({name : $(e).attr('name'), value : val});
    });
    return filters;
}


$(document).ready(function() {
    var filters = getFilters();
    // do something with filters
});

答案 1 :(得分:0)

问题是函数getFilters实际上什么也没有返回,因为它只是调用jQuery(document).ready(...);,只是绑定一个函数以便稍后运行。返回过滤器的匿名函数实际上在页面准备好后调用,但是getFilters的调用者不接受返回值。

答案 2 :(得分:0)

您需要将过滤器var定义为一级或将其设置为全局。现在它在jQuery定义的函数中是本地的,所以它在getFilters中不可见。