我正在尝试构建一个函数,在我的页面中使用'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(过滤器);代替回收过滤器;我的数据拉得很好。当我尝试返回它时,它只会导致未定义。非常感谢任何帮助。
答案 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中不可见。