javascript - 将循环计数值传递给 JQuery SlideUp 回调

标签 javascript jquery

以下面的代码为例,我想将值“i”传递给回调函数,以便它从正确的 div 中删除该类。目前,这仅将 i 视为循环中的最后一个值。

for(i=0;i<tablelength;i++){
    if($('#detailsdiv'+i).is(':visible')){
        $('#anotherdiv'+i).slideUp('slow',function(){
        $('#div'+i).removeClass('open');
    });
}

最佳答案

发生这种情况的原因很简单:向上滑动函数返回并调用回调需要一些时间。事实上,这种类型的函数调用是非阻塞的,for 循环将快速到达最后一个值,并且所有回调将引用最后一个 i 值。

试试这个:

for (index=0; index < tablelength; index++) {
    (function(i) {
        if ($('#detailsdiv' + i).is(':visible')) {
            $('#anotherdiv' + i).slideUp('slow', function() {
                $('#div' + i).removeClass('open');
            });
        }
    })(index);
}

这样,我们创建了一个函数,该函数会立即使用一个新的作用域来调用,该新作用域将保存我们的变量。每个函数都使用我们的 for 循环迭代器 index 参数进行调用,并使用其中的 i 变量。

关于javascript - 将循环计数值传递给 JQuery SlideUp 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22355730/

相关文章:

javascript:如果用户名存在,则不提交表单

javascript - SharePoint 2013 JSLink OnPostRender

javascript - 使用 jQuery 触发立即调整大小

javascript - 如何在显示覆盖的更改事件后捕获点击事件?

jquery 移动静态页脚导航栏

javascript - 如何从行的特定列获取文本?

javascript - 缩放图像组以适合父宽度/高度

javascript - 我无法提取 JSON 格式的某些数据

javascript - Protractor : how to compare the text content of the same web element before and after clicking on a button

javascript - 如何 trim jquery flot 中的轴编号?