【问题标题】:Dynamic include of a list of variables into a Jquery function as parameters将变量列表作为参数动态包含到 Jquery 函数中
【发布时间】:2018-08-17 12:27:32
【问题描述】:

如果事先不知道变量的名称和数量,如何将变量列表动态注入函数。特别是:

我正在尝试替换这个“硬编码”版本:

$.when(img1Loaded,img2Loaded,img3Loaded).done(function () { ... etc

类似这样的:

$.when(MyDynamicList).done(function () { ... etc

在更广泛的上下文中,var MyDynamicList 可以使用脚本填充,它包含来自宣布每个图像加载完成的函数的响应。也就是说,我需要引用一些这样声明的变量,如下所示:

var img1Loaded = $.Deferred();

然后在 'img.onload' 函数中引用为:img1Loaded.resolve();

我可以为单个图像工作,但不能为 2 个或更多...

以此类推:

var it=['#d1,#d2'];

$(it[0]).on( "click", function() {
    alert(this.id);
});

换句话说,如何为我的案例创建等效的“它”。这是完全错误的:var MyDynamicList= img1Loaded,.... imgNLoaded;

我在这上面画了一个完全空白......

【问题讨论】:

    标签: javascript jquery jquery-deferred


    【解决方案1】:

    也许您可以创建自己的“when”函数来使用 Promise 处理数组:

    function myWhen(dynamicList) {        
        const promises = dynamicList.map(item => new Promise( function(resolve,reject) {
            $.when(item).done(data => resolve(data));
        } ) );
    
        return Promise.all(promises);
    }
    
    const MyDynamicList = [$.ajax( "foo" ) , $.ajax( "bar.aspx" ) ...];
    
    myWhen(MyDynamicList).then( items => {
        //do stuff
    } ).catch(err => {
        //handle error
    })
    

    myWhen 将在 dynamicList 中的所有“thenables”解析后完成。

    您可以在此处阅读有关 Promise 的更多信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

    希望对你有帮助

    【讨论】:

    • 查看最新版本的答案,我意识到我犯了一个小错误
    • 您建议的方法按预期工作,谢谢马丁!如果没有其他建议,我将重新定义我的方法并接受您的回答作为最终解决方案。
    • 太棒了。暂时没有更多建议
    • 这实际上是一段非常方便的代码,适用于许多不同的场景。感谢分享马丁!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 2023-03-08
    • 2014-08-18
    • 2020-01-13
    相关资源
    最近更新 更多