jquery 回调函数仅在最后一个循环中工作

2024-02-16

for (var i = 0; i < barValues.length; i++) {


    actualBarHeight = Math.floor((barValues[i] / chartMaxY) * barchartHeight);

    var barChartID = "#barChart" + (i + 1)
    $(barChartID + " .value span").css('background-color', 'transparent');
    $(barChartID + " img").animate({
        height: actualBarHeight
    }, 500, function () {
        $(barChartID + " .value span").css('background-color', 'white');
    }
    );

    $(barChartID + " .value span").html("$" + Math.floor(barValues[i]));
    $(barChartID + " .value").css("bottom", actualBarHeight + "px");
    $(barChartID + " .ylabel").html(chartMaxY);

}

上面的 jQuery 部分位于 for 循环内。循环的每次迭代都会执行以下操作:

  • 设置跨度的背景
  • 使对象具有动画效果
  • 完成后,重置跨度的背景

我使用回调函数来重置背景,以便它在执行此操作之前完成动画。但是,它最终只会影响 for 循环中引用的最后一个跨度。

如果我将这段代码移到回调之外,那么它会影响 for 循环的每次迭代中的每个范围(但在这种情况下不会等待动画)

我猜这个问题与在动画函数内的函数内构建选择器有关。我的标记中是否存在一些错误的语法?

编辑(根据 Russ 的建议,我现在在上面的示例中包含完整的循环)


这是将闭包与循环组合时遇到的常见问题。 JavaScript 是一种后期绑定语言,循环不会引入新的作用域。所以:

for (var i= 0; i<5; i++) {
    $('#thing'+i).click(function() {
        alert(i);
    });
}

只有一个i这段代码中的变量。它开始于0一旦赋值循环完成,就留在5。上的点击事件#thing0元素只会被解雇after循环已完成执行,此时的值i5。您将不会获得定义时间值0这可能是你所预料到的。

这不仅适用于循环变量本身,也适用于每次循环时重新分配的任何其他变量。所以在你的例子中的值barChartID动画回调函数内部始终是与循环中最后一个元素关联的 id。

通常的解决方法是使用以下结构在定义时获取循环变量值的副本:does引入一个新的作用域,即另一个函数:

$(barChartID + " img").animate({height: actualBarHeight}, 500, function(barChartID) {
    return function() {
        $(barChartID + " .value span").css('background-color','white');
    };
}(barChartID));

更多关于循环闭包的信息。 https://stackoverflow.com/questions/643542/doesnt-javascript-support-closures-with-local-variables

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jquery 回调函数仅在最后一个循环中工作 的相关文章

  • 如何使用 javascript/jquery/AJAX 调用 Django REST API?

    我想使用 Javascript jQuery AJAX 在前端调用 Django Rest API 请求方法是 POST 但当我看到 API 调用它的调用 OPTIONS 方法时 所以 我开始了解access control allow o
  • 如何检测元素内容何时发生变化

    我正在寻找一种方法来监视元素内动态填充 无页面重新加载 内容 以便我可以将类添加到另一个元素 到目前为止我有这个 HTML div class message container div class messages error span
  • 如何打开弹出窗口并用父窗口中的数据填充它?

    如何使用 JavaScript jQuery 使用父页面中 JS 变量的数据填充弹出窗口 在我的示例中 我有一个文件名数组 我在父窗口中最多列出五个 如果还有更多 我想提供一个链接来打开弹出窗口并列出数组中的每个帖子 因此 如果我打开一个包
  • jQuery - 系列之外的 HighCharts 标签(条形图)

    function container highcharts chart type bar backgroundColor null width 360 title text null style display none subtitle
  • 在 PHP 中模拟 jQuery.ajax 请求

    我必须在 PHP 中模拟 AJAX 请求 就像在 jQuery 中一样 我当前的代码在这里 原始 AJAX 调用 不得修改 ajax type POST url someFile php data data success function
  • 使用 json 向 RESTful WCF 发送 Post 请求

    我已经尝试了每种组合来发送请求 以从 jQuery 向 RESTful WCF 发送 POST 请求 有人可以模仿并使其发挥作用吗 代码在这里 http pastebin com Ua97919C http pastebin com Ua9
  • ASP.NET MVC 4 中的 Toast 通知

    我想在用户使用 Toastr 插件单击 添加到购物车 按钮时显示通知 基本上 当用户单击按钮时 它会执行 AddToCart 操作 然后重定向到索引页面 当页面显示时 它会检查 TempData 值 然后显示通知 这是控制器 public
  • 绑定到 ajax 调用的 Spinner 将不会显示,除非我在 javascript 中添加警报

    我编写了一个简单的方法 将微调器添加到 html 页面的主体 并将事件绑定到 ajaxstart 方法 然后在 ajaxstop 上将其删除 StartAjaxCallSpinner function spinnerObj var bod
  • Fancybox - Ajax 图片库

    我有一个自定义图像库 它用缩略图填充 div 每个缩略图都包含在一个 fancybox 组中 当您单击一个 它在 fancybox 中打开 时 您可以按 上一张 下一张 在第一 页面 上的图像之间循环 要在页面之间移动 您必须关闭 fanc
  • PHP、jQuery 和 Ajax 调用乱序

    我正在使用 jQuery 进行 Ajax 调用 我有 x 数量的 Ajax 调用附加到 div 这些 Ajax 加载请求是由 PHP foreach 循环生成的 问题是它们渲染的顺序不正确 它们被设置在数组中
  • Arbor Js - 节点 Onclick?

    我在用着arbor js http arborjs org 创建图表 我如何创建一个onclick节点的事件 或者在单击时在某处创建节点链接 Arborjs org 主页的节点在单击时链接到外部页面 我如何复制它 或者使节点在单击时调用 j
  • 像在 tumblr 注册页面上那样鬼写

    有谁知道如何创建一个类似 tumblr 的字段 http www tumblr com http www tumblr com 这是一个 URL 字段 其中有一些褪色的文本 然后当您单击它并键入时 它会附加一些文本 tumblr com 您
  • 如何确定并打印 jQuery 版本?

    是否有一个 jQuery 函数可以返回当前加载的 jQuery 版本 你可以使用这个 fn jquery or if you re using noConflict jQuery fn jquery 当 jQuery 构建时它会自动更新 定
  • 如何在 DOM 中的每个元素中调用函数,即使它们是动态创建的

    我想对 DOM 上的特定元素调用函数 例如 red css backgroundColor pink 它适用于 DOM 中已经存在的任何元素 但我也希望在动态添加到 DOM 的元素中调用此方法 我尝试过类似的事情 red on functi
  • 使用 jQuery Select2 清除下拉菜单

    我正在尝试使用奇妙的方式以编程方式清除下拉菜单Select2 http ivaynberg github com select2 图书馆 使用 Select2 远程 ajax 调用动态填充下拉列表query option HTML
  • 检测 Google 验证码的挑战窗口何时关闭

    我正在使用谷歌隐形验证码 有没有办法检测挑战窗口何时关闭 我所说的挑战窗口是指您必须选择一些图像进行验证的窗口 目前 我在按钮上放置了一个旋转器 一旦单击按钮 就会呈现验证码挑战 无法向用户提示另一个质询窗口 我以编程方式调用渲染函数 gr
  • 销毁 JQuery 可拖动对象

    我有一组可拖动的元素 如何删除可拖动功能 draggable draggable disable 对我来说不是一个选择 draggable draggable destroy 回报Uncaught TypeError Cannot read
  • jQuery UI 自动完成的“源”回调中的“响应”和“请求”参数是什么?

    我正在查看自动完成教程 我有几个问题 http jqueryui com demos autocomplete option disabled http jqueryui com demos autocomplete option disa
  • JQuery:将 FormData 和 csrf 令牌一起发布

    Is the data 下面的行正确吗 我想将表单数据和 csrf 令牌发布到 Django 视图函数 file upload on change function var currentpath window location pathn
  • 如何在 Jquery/Javascript 中绑定模糊和更改,但只触发一次函数?

    我试图在选择元素更改时触发函数 由于 Ipad 在 on change 方面遇到问题 我还想绑定到 blur 这在 Ipad 上工作得很好 但是我不希望两个事件都触发该函数两次 所以我需要某种挂钩来确保两个事件是否都触发change and

随机推荐

  • python如何在赋值运算符之后赋值[重复]

    这个问题在这里已经有答案了 好吧 我确信这是一个非常愚蠢的问题 但是python如何给变量赋值呢 说有一个变量a并被赋值a 2 所以python为变量分配了一个内存位置并且a现在指向包含该值的内存位置2 现在 如果我分配一个变量b a变量b
  • 以编程方式编辑表单回复

    我有一个谷歌脚本 可以为转储到我的电子表格中的每个表单响应生成编辑网址 有没有办法以编程方式更改响应值 就像我实际打开 URL 并手动更改值一样 例如 假设某人提交了一份姓名字段为 Sam 的表单 我希望能够以编程方式编辑此响应 以便同一字
  • 设备锁定时在 Today 扩展中加载文件

    在我今天的设备解锁的扩展中 这行代码按预期工作 从图像路径返回数据 let imageData NSData contentsOfFile path 但是 当我的设备用密码锁定时 它返回零 当设备锁定时 有什么方法可以访问文件系统中的图像吗
  • 全局设置环境变量而无需重新启动Ubuntu

    我知道可以通过添加条目来设置系统范围的环境变量 etc environment or etc profile 但这需要系统重新启动或 X 重新启动 是否可以在 Ubuntu Linux 中设置环境变量 以便在系统范围内立即可用 而无需重新启
  • 使用 for 循环进行多个公司和多个日期的事件研究

    我正在进行一项事件研究evReturn函数从erer包裹 目的是获得每个公司的超常收益以及所有公司的平均超额收益 我无法获得平均回报 因为该函数对每个公司执行单独的执行 但不会同时对所有公司执行一次 尽管这可以通过 for 循环实现 我似乎
  • 屏幕方向更改时非法状态异常未创建视图

    我一直在尝试制作一个从活动 GradeListActivity 打开列表视图片段 GradeListFragment 的应用程序 当我单击某个项目时 它会打开一个新片段 GradeDetailFragment 如果处于纵向模式 它将替换fr
  • Lazarus:如何列出系统上所有可用的网络连接?

    我正在使用 Lazarus IDE 在 Linux 系统上编写程序 该程序应该连接到 Internet 或 Intranet 所以 我想向用户显示他们可以用来连接到互联网或内部网 如wifi 的所有可用网络连接的列表 如果系统上有两个活动网
  • LinkLabel... 在默认网络浏览器中打开?

    是否可以开一个LinkLabel在默认计算机网络浏览器中 是的 你可以使用System Diagnostics Process Start url 在 链接被点击 事件中
  • HTTP 状态 403 - 对所请求资源的访问已被拒绝(CSS 被阻止?)

    我一直在努力保护我的项目 我有一个使用 LDAP 服务器进行身份验证的登录页面 如果不正确 它会显示一个错误页面等 我现在刚刚添加
  • 为什么 pip 需要在 iPython 中使用感叹号?

    只是一个简单的例子 输入pip list不起作用但是 pip list做 是否有一些关于感叹号和在 ipython shell 中使用模块的语法 这实际上并不特定于pip 但实际上是来自 iPython 笔记本的任何 shell 命令 您会
  • 如何在android中的sqlite数据库中存储带有列表的自定义对象

    如何为包含这样的列表的自定义对象创建表 public class Mobel implements Parcelable int thumbnail List
  • 修复 SwiftUI 中自定义字体的行距

    我正在使用自定义字体 双体船 https fonts google com specimen Catamaran 并且看起来行与行之间有很大的空间 例如我有这样的代码 Text Example text that has big space
  • 保存单个核心数据实体(而不是整个上下文),同时保留 NSFetchedResultsController 功能

    唷 抱歉标题太长了 我有一个托管对象上下文 其中存储来自两个不同位置的歌曲 我从手机上的持久存储中获取一些歌曲 使用 Core Data 并从在线数据库中提取一些歌曲 这两首歌曲都属于同一 ManagedObject 子类 我希望这两首歌都
  • 迁移 COBOL 代码

    我的任务是将 COBOL 代码转换为 NET 有可用的转换器吗 我正在尝试高层次地理解 COBOL 代码 我无法理解 COBOL 代码 有没有流程图生成器 我很感激任何帮助 谢谢 将软件系统从一种语言或操作环境迁移到另一种语言或操作环境始终
  • 如何在Fauxton中使用reduce

    我一直在关注一些 Couch 培训 但无法弄清楚如何在 Fauxton 中使用reduce 选择地图区域下方的 count 本身不会执行任何操作 我尝试将其添加到地图代码下方 但我想我需要以某种方式集成它 在我的示例中 我试图计算每个标签在
  • git create stash 无需配置 user.email 和 user.name (git stash --author ?)

    IN SHORT 是否有可能创建一个存储 使用git stash create without需要配置user email and user name 类似的东西git commit author选项 一些背景 我有几台构建机器 上面有一个
  • 如何在内核程序(内核上下文)中访问用户程序创建的bpf映射?

    假设有两个程序 用户程序和内核程序 用户程序通过api制作bpf图bpf create map name 返回 fd 有了这个 fd 我可以通过系统调用访问地图 例如 bpf map update FD 但我只能在用户空间程序中执行此操作
  • 在 Rails 和 PostgreSQL 中完全忽略时区

    我正在处理 Rails 和 Postgres 中的日期和时间并遇到这个问题 数据库采用 UTC 时间 用户在 Rails 应用程序中设置选择的时区 但仅在获取用户本地时间以比较时间时使用 用户存储一个时间 比如 2012 年 3 月 17
  • 为什么 unset() 在 PHP 三元运算符中不起作用

    所以这有一个问题 但我对此视而不见 即使阅读文档两次 PHP 比较运算符 http us php net manual en language operators comparison php isset items blog unset
  • jquery 回调函数仅在最后一个循环中工作

    for var i 0 i lt barValues length i actualBarHeight Math floor barValues i chartMaxY barchartHeight var barChartID barCh