javascript - 仅在堆栈中的最后一个执行回调

标签 javascript jquery

目前我是这样设置的,

var elements = $('#one, $two, #three, #four, #six');

var _temp = 0;
elements.hide(0, function(){
    /* by default, the callback will be performed to
       every single element in stack */

    _temp++; // increment temporary cache

    // perform actual callback only on last in list
    if (_temp == elements.length) {
        // do stuff
    }
});

但感觉不对,因为如果我想对下面的另一个回调 241 行执行相同的操作,我必须重置 _temp 并且全局变量太乱了。

我怎样才能简化这个?

最佳答案

一种可能的方法是使用闭包:

var elements = $('#one, $two, #three, #four, #six');

elements.hide(0, (function(){
    var _temp = 0;
    return function(){
        _temp++; // increment temporary cache

        // perform actual callback only on last in list
        if (_temp == elements.length) {
            // do stuff
        }
    };
})());

如果您想更频繁地使用此模式,您可以创建一个返回回调的函数。

另请注意 .hide()有一个持续时间作为第一个参数。

关于javascript - 仅在堆栈中的最后一个执行回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11536670/

相关文章:

javascript - 如何允许用户重新提交表单而不发出警告

javascript - 在网页 View 中使用 Javascript

javascript d3 selectAll 转换为循环

javascript - 使用 ddSlick 并按值而不是索引选择列表中的项目

javascript - 编写 jQuery 选择器的最佳实践

javascript - Changed.jstree 事件在类方法内部的 jstree 中不起作用

javascript - Node.js - Socket.io 一遍又一遍地重复 'io.on(' 连接')

php - 在 jQuery ajax 中传递数组

jquery - 采取未指定的属性,

javascript - 将事件绑定(bind)到 ajax 成功返回的 View 中的元素