无法弄清楚jQuery延迟完成了

时间:2015-06-12 18:33:30

标签: javascript jquery jquery-deferred

我是 jquery 的新手,我花了一段时间在这里查看类似的问题,但无济于事。我可以使用一些帮助

我有一个抓取表单输入值的功能和一个保存这些值的f 功能。在执行保存项功能之前,表单输入值的抓取速度不够快。我试图通过使用jquery延迟解决这个问题,但无法让它工作。我也尝试过使用.when和.done。 当我在我的js文件中硬编码参数时,Attempt 2工作但是当我在onclick或我的控制台中传递参数时没有。

任何帮助将不胜感激!

尝试1:

function deferredTest1(w,x,y,z) {

    var d1 = $.Deferred();
    d1.done(function() {

    SaveNewItem(x,y,z);

});

function getFormValues(w) {
     $(w).each(function(i,obj) {
     var input = $(this).val();
     var inputID = $(this).attr('id');
     str = str.concat(",'"+inputID+"':'"+input+"'");  
     });

 }

 d1.resolve();

}

尝试2:

function deferredTest2(w,x,y,z) {

    var formvalues = getFormValues(w);
    $.when(formvalues).done(SaveNewItem(x,y,z));
}

1 个答案:

答案 0 :(得分:0)

你的第二次尝试是最接近的。 $.when调用会延迟,因此我们首先创建一个,然后在$.when调用中使用它。循环完成后,在getFormValues方法中解析它。此时执行then回调。

var deferred = $.Deferred();
function deferredTest3(w,x,y,z) {
    $.when(deferred).then(function () {
        SaveNewItem(x,y,z);
    });
}
function getFormValues(w) {
    $(w).each(function(i,obj) {
        var input = $(this).val();
        var inputID = $(this).attr('id');
        str = str.concat(",'"+inputID+"':'"+input+"'");  
    });
    deferred.resolve();
}

此处没有异步操作,因此不需要延迟。延迟用于管理各种异步请求及其回调,如果它们彼此依赖的话。