我有函数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/

10-13 03:22