我有函数requestXML
,该函数进行异步调用以获取xml文件
我也有这个实现效果很好
function show(url){
requestXML(url, function(xml){
var items = $(xml).find('item');
var list = new Array();
$.each(items, function(){
list.push($(this).text());
});
displayList(list);
});
}
但是,我想通过这样做使函数显示更通用
function show(url, func1){
requestXML(url, function(xml){
var items = $(xml).find('item');
var list = new Array();
$.each(items, func1(list));
displayList(list);
});
}
var func1 = function(list){
list.push($(this).text());
}
当我这样做时,我得到以下错误:“Uncaught TypeError:无法调用未定义的方法'call'。
我知道
this
中的list.push($(this).text());
中的对象func
必须更改为其他内容,但我不知道该怎么做。我该如何工作? 最佳答案
您要立即调用func1(list)
,然后将其返回值(undefined
,因为它没有返回语句)传递给$.each
。
$.each(items, func1(list));
等效于:
var result = func1(list); // Will be undefined
$.each(items, result);
您可以改用以下方法:
function show(url, func1){
requestXML(url, function(xml){
var items = $(xml).find('item');
var list = new Array();
$.each(items, $.proxy(func1, list));
displayList(list);
});
}
var func1 = function(el){
this.push($(el).text());
}
关于javascript - 将闭包传递给Jquery $ .each,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18533902/