我有一个函数可以存储来自HTML表单的多个值,并且必须单独工作才能在我需要的任何情况下存储该信息(即在插入数据库之前,或者在数据库上更新信息之前...)< / p>
我需要能够告诉系统执行此函数('storeValues'
),然后执行任何其他函数(可能是'createNewClass'
,'updateExistingClass'
......等等。< / p>
我该如何排序呢?我在这里尝试先存储值,然后在完成时执行另一个函数,但是它表示&#34; storeValues()没有定义&#34;,它被定义:
$('.tableClassHeader').on('click', '.createClass', function(){
storeValues().promise().done(function(){
createNewClass();
});
});
function storeValues(){
cl_year = $('.newClassForm').find('select[name=cl_year]').val();
cl_course = $('.newClassForm').find('select[name=cl_course]').val();
}
function createNewClass(){
alert(cl_year);}
我的意思是storeValues函数应该是一个单独的函数,可以从任何其他地方调用,我知道这个问题可以通过执行&#34; createNewClass&#34;来解决。来自&#34; storeValues&#34;功能,但有时我需要执行&#34; updateClass&#34;在&#34; storeValues&#34;之后&#34; createNewClass&#34;
答案 0 :(得分:1)
您可以使用这样的回调,如果,您的storeValues
与您的示例不同步:
$('.tableClassHeader').on('click', '.createClass', function(){
storeValues(createNewClass);
});
function storeValues(callback){
cl_year = $('.newClassForm').find('select[name=cl_year]').val();
cl_course = $('.newClassForm').find('select[name=cl_course]').val();
callback();
}
function createNewClass(){
alert(cl_year);
}
如果它是同步的,只需在createNewClass
之后调用storeValues
即可。
这是做什么的:
storeValues
storeValues
内,它调用作为参数传递的回调函数如果您需要使用其他范围执行功能,可以使用call
或apply
。
另一种方法是在没有回调的情况下使用
http://api.jquery.com/promise/
http://api.jquery.com/jQuery.when/
http://api.jquery.com/deferred.promise/
此处显示的示例http://jsfiddle.net/47fXF/1/:
$('.tableClassHeader').on('click', '.createClass', function(){
$.when(storeValues()).then(createNewClass);
});
function storeValues(){
var dfd = new jQuery.Deferred();
setTimeout(function(){
console.log('storing values');
cl_year = $('.newClassForm').find('select[name=cl_year]').val();
cl_course = $('.newClassForm').find('select[name=cl_course]').val();
dfd.resolve();
}, 1000);
return dfd.promise();
}
function createNewClass(){
alert("trololo");
}
添加了setTimeout
来模拟异步性。
如果您的storeValues
仅使用jQuery发出一个ajax请求,那么您可以直接返回它,如API文档中所示。
另请务必恰当地致电resolve()
,reject()
。
答案 1 :(得分:0)
这样打电话。它在执行createNewClass函数
之后首先调用storeValues$('.tableClassHeader').on('click', '.createClass', function(){
storeValues(function() {
createNewClass();
});
});
function storeValues(callback){
cl_year = $('.newClassForm').find('select[name=cl_year]').val();
cl_course = $('.newClassForm').find('select[name=cl_course]').val();
callback();
}