我是 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));
}
答案 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();
}
此处没有异步操作,因此不需要延迟。延迟用于管理各种异步请求及其回调,如果它们彼此依赖的话。