gpt4 book ai didi

javascript - 在 jQuery 上对多个函数进行排序

转载 作者:行者123 更新时间:2023-12-03 12:44:02 25 4
gpt4 key购买 nike

我有一个函数,可以存储 HTML 表单中的多个值,并且该函数必须单独工作,以便在我需要的任何情况下存储该信息(即在数据库上插入之前,或在数据库上更新信息之前...)

我需要能够告诉系统执行此函数('storeValues'),然后执行任何其他函数(可以是'createNewClass''updateExistingClass'...无论如何)。

我该如何排序?我在这里尝试首先存储值,完成后执行另一个关于值的函数,但它说“storeValues() 未定义”,并且已定义:

$('.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 函数应该是一个单独的函数,可以从任何其他地方调用,我知道这个问题可以通过从“storeValues”函数执行“createNewClass”来解决,但有时我会需要在“storeValues”之后执行“updateClass”,而不是“createNewClass”

最佳答案

您可以使用这样的回调,如果您的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);
}

如果是同步的,只需在storeValues之后调用createNewClass就足够了。

它的作用是:

  • 使您能够将选择的函数传递给storeValues
  • storeValues内部调用作为参数传递的回调函数

如果您需要在不同的范围内执行函数,您可以使用callapply

<小时/>

另一种无需回调的方法是使用

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()

关于javascript - 在 jQuery 上对多个函数进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23406182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com