【发布时间】:2015-06-12 18:33:30
【问题描述】:
我是 jquery deferred 的新手,我在这里花了一段时间查看类似的问题,但无济于事。我可以使用一些帮助
我有一个获取表单输入值的函数和一个保存这些值的函数。在保存项目功能执行之前,表单输入值的抓取速度不够快。我试图通过使用 jquery deferred 来解决这个问题,但无法让它工作。我还尝试使用 .when 和 .done。 当我在我的 js 文件中硬编码参数时,尝试 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));
}
【问题讨论】:
-
你是什么意思,他们“被抓得不够快”?抓住它们,然后保存。
-
非常有帮助的评论,先生,非常感谢!你看,它们被存储在变量 str 中。问题是 getFormValues 函数没有在 SaveNewItem 函数之前执行。因此正在保存空值...
-
为什么在保存新项目之前不执行?当你点击/提交/随便叫它那里。为什么要将它们存储在全局变量中?
-
为什么不是我发布问题的原因。我将它们存储在一个全局变量中,因为我需要能够在我的 SaveNewItem 函数中传递该变量。
-
... 这听起来像是 XY 问题。 问题 是您将它们存储在全局变量中,而不是在 实际上保存它们 时进行。你错过了我的意思:为什么你试图将它们保存在你实际使用它们的地方? 可能有一个实际的技术/业务原因,但在你明确说明它是什么之前,这似乎是一种非常复杂的方式来做一些微不足道的事情。
标签: javascript jquery jquery-deferred