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

标签 javascript jquery

我有一个函数,可以存储 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/

相关文章:

jquery - Bootstrap 列与字段集的高度相同

javascript - 将 float 的 div 粘贴到另一个元素的当前位置

jquery - 需要视频为 3 个样式表工作 - 目前视频从较小的 div 中溢出

javascript - 最佳基于 Web 的 SVG 所见即所得

javascript - 暂停点击事件直到用户输入

javascript - React教程错误渲染CommentForm和CommentList

javascript - Linkedin OAuth 无法正常工作

javascript - 在 jQuery Mobile 1.1 中进行大量处理之前显示加载微调器?

javascript - 当 process.env.NODE_ENV= ='production' 时,使用 babel-polyfill 在 IE11.0.9600 中未定义 fetch 和 Headers

javascript - jquery fade div颜色改变