jQuery 添加的 div 上的 Google 地图 addDomListener 只能看到循环的最后一次迭代

2023-12-14

我有以下简单的脚本:

var fruits = new Array("apple","orange","lemon");

$("#fruit_canvas").append("Mouse over these fruits:");

for(var i = 0; i < fruits.length; i++)
{
    var fruit = fruits[i];
    var html = "<div id='fruit" + i + "'>" + fruit + "</div>";
    var fruitdiv = $(html);
    $("#fruit_canvas").append(fruitdiv);

    google.maps.event.addDomListener($(fruitdiv)[0], 'mouseover', function() {
        $("#result_canvas").append("Mouse over " + fruit);
    });

    google.maps.event.addDomListener($(fruitdiv)[0], 'mouseout', function() {
        $("#result_canvas").empty();
    });
}

它循环遍历一个简单的数组,使用 jQuery 从每个元素中创建一个 div,并将其附加到另一个 div。然后将 Google 地图 DOM 侦听器添加到每个附加的 div 中。这一切都工作正常,但 DOM 监听器似乎只知道数组的最后一个元素,即,它总是返回“柠檬”作为水果,无论您将鼠标悬停在哪个附加 div 上。

要明白我的意思,请访问http://www.pinksy.co.uk/maptest.html并将鼠标悬停在每个 div 上。

我确信这与我如何将 DOM 元素传递给 DOM 侦听器有明显的关系,但我不确定如何!

我也尝试过不使用 jQuery,但得到相同的结果:

document.getElementById('fruit_canvas2').appendChild(document.createTextNode("Mouse over these fruits:"));

for(var i = 0; i < fruits.length; i++)
{
    var fruit = fruits[i];
    var div = document.createElement('div');
    div.innerHTML = fruit;
    document.getElementById('fruit_canvas2').appendChild(div);

    google.maps.event.addDomListener(div, 'mouseover', function() {
        document.getElementById('result_canvas2').appendChild(document.createTextNode("Mouse over " + fruit));
    });

    google.maps.event.addDomListener(div, 'mouseout', function() {
        var cell = document.getElementById('result_canvas2');

        if(cell.hasChildNodes())
        {
            while(cell.childNodes.length >= 1)
            {
                cell.removeChild(cell.firstChild);       
            } 
        }
    });
}

提前致谢...


您遇到的问题是范围之一。当您创建监听器时,fruit确实有正确的值,但是当它执行时,它采用最后的状态fruit就你而言,lemon.

您要做的很简单,您需要创建一个委托。你可以这样做:

var someFunction = (function(vars) {
    return function() {
        //Do something with vars...
    };
})(vars);

以及你存储的内容someFunction将保留声明时 vars 的值。 您使用它的代码将如下所示:

var fruits = new Array("apple","orange","lemon");

$("#fruit_canvas").append("Mouse over these fruits:");

for(var i = 0; i < fruits.length; i++)
{
    var fruit = fruits[i];
    var html = "<div id='fruit" + i + "'>" + fruit + "</div>";
    var fruitdiv = $(html);
    $("#fruit_canvas").append(fruitdiv);

    var mouseoverListener = (function(fruit) {
        return function() {
            $("#result_canvas").append("Mouse over " + fruit);
        };
    })(fruit);
    google.maps.event.addDomListener($(fruitdiv)[0], 'mouseover', mouseoverListener);

    google.maps.event.addDomListener($(fruitdiv)[0], 'mouseout', function() {
        $("#result_canvas").empty();
    });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jQuery 添加的 div 上的 Google 地图 addDomListener 只能看到循环的最后一次迭代 的相关文章

  • RichFaces 4 替换

    我目前正在使用 RichFaces 3 3 将旧版 JSF 1 2 应用程序迁移到 JSF 2 0 和 RichFaces 4 但是 包含与 RichFaces 捆绑在一起的 jQuery 库不再有效
  • 根据输入字段的字符数动态扩展输入类型“文本”的高度

    与下面的 JSFiddle 类似 我将其添加为书签 但不知道原始问题从哪里出现 http jsfiddle net mJMpw 6 http jsfiddle net mJMpw 6
  • 无法访问通过 jQuery ajax 发送的我的 Post 值

    EDIT 用 htaccess 删除 index php 会创建我刚刚发现的这个问题 现在我要着手解决它 EDIT 问题解决了 JavaScript 是错误的 url login 它需要一个尾部斜杠 ORIGINAL 在我的主页视图中 我创
  • Bootstrap 下拉按钮名称在单击时发生变化

    我正在使用下拉按钮 4 个按钮 来过滤项目中的内容 并且我希望按钮名称更改为选定的 这样用户就不会忘记他 她在哪里 见图 这怎么可能 提前谢谢 这是pen http codepen io aktuna pen FqKjb 您可以使用 jQu
  • Flexslider 在循环后停在第一张幻灯片处

    我试图让 Flexslider 进行完整循环 然后在返回到第一张幻灯片后停止或暂停 到目前为止 这是我的代码 window load function flexslider flexslider animation slide animat
  • 用于动态实时事件的 Tipsy jquery 插件无法正常工作

    我在用着醉酒的 jquery 插件 http onehackoranother com projects jquery tipsy 为动态显示的元素创建工具提示 工具提示适用于非动态元素 因此我肯定包含了我需要的所有内容 我正在使用 jqu
  • 有没有办法同步 gif 文件?

    我有一个页面 上面有 7 个 gif 文件 有没有办法将它们全部同步 以便它们同时开始播放 我正在考虑预加载它们 但如果一个加载时间比另一个加载时间长 它们仍然可能无法开始同步 正如 Archer 上面指出的 一种方法是预加载它们 然后重置
  • 单击传单弹出窗口内的链接并执行 Javascript

    我已经准备好了一份传单地图并正在运行 它在地图上覆盖一系列多边形 通过 GeoJSON 并将弹出窗口附加到每个多边形 每个弹出窗口都显示有关该多边形的信息 我想在弹出窗口内有一个链接 单击该链接时 会运行一个 javascript 函数 该
  • 用另一个文本替换所选内容

    我正在尝试用其他文本替换所选文本 考虑以下是文本行 世界你好 早上好 你好世界 早上好 如果我选择第二个morning文本 我想用晚上替换早上的文本 因此输出需要如下所示 世界你好 早上好 你好世界 晚安 我尝试了替换功能 但它正在替换第一
  • jQuery 库包含顺序导致错误

    我的 jQuery UI 对话框有问题 当我单击 X 按钮时它没有关闭 我发现如果我更改 javascript 的顺序 问题就会消失 包括 如果我按以下顺序包含文件 则会出现问题 如果我按以下顺序包含文件
  • 使用jquery从javascript加载.txt文件[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想加载本地 txt 文件并使用 j
  • 检测 Firefox 中的关闭窗口事件

    我知道这是一个很常见的问题 但相信我 我无法通过网络找到答案 我的目的是仅当用户单击关闭 X 按钮时才触发消息框 如果用户单击后退 前进按钮以及使用 F5 CTRL R 则他会继续收到消息框 我不想将窗口关闭按钮单击之外的任何其他操作关联起
  • 在一次重绘/回流中进行多个 DOM 更新?

    我有一个表 其中填充了已连接用户的列表 列表本身不会经常更改 但每行上的其中一个内容是每秒更新一次的计时器 hh mm ss 为了更新计时器 我正在做这样的事情 var curTime new Date getTime 1000 timer
  • 如何使用ajax post请求将模态值插入数据库?

    查看代码 div class price div
  • jQuery:通过子项进行动画、连续循环

    接近但还没有完全实现 我想让第一个子 div 显示几秒钟 向下滑动 通过定位 并淡出视图 然后下一个子 div 向上滑动并淡入视图 连续重复 在显示最后一个子项后循环返回 看起来我已经让循环正常工作了 尽管计数似乎将子 div 堆叠在一起
  • jQuery Calendar:如何在特定日期添加可点击事件?

    我正在使用 jquery 完整日历http arshaw com fullcalendar http arshaw com fullcalendar显示会议 我只是想确认是否可以添加活动 让我们创建一个新会议 使用 php ajax 在特定
  • 如何在 js.erb 中使用 Ruby 代码?

    我可以使用以下方式在模态中渲染部分内容escape javascript在js erb文件代码中 body append my modal modal show 但是 我似乎无法获得以下结果 console log ERB 将输出一个纯字符
  • 设置三个输入数字的最大值

    我有三个输入数字
  • 通过 jQuery ajax 将 JSON 对象数组发送到 MVC3 操作方法

    模型绑定器不支持 JSON 对象数组吗 下面的代码在发送单个 JSON 域对象作为 ajax post 的一部分时起作用 但是 当发送 JSON 域对象数组时 action 参数为 null var domains DomainName t
  • 即使切换它时,hasClass 也始终返回 false

    我有以下代码

随机推荐

  • tf.keras 和 tf.python.keras 有什么区别?

    我遇到过严重的不兼容问题 因为相同的代码在其中一个与另一个之间运行 例如 获取张量的值 编译模型 节省优化器 展望Github源码 模块及其导入看起来相当相同 并且tf keras甚至进口自tf python keras 在教程中 我经常看
  • Python:使用 imshow 绘制 2D 彩色图

    我试图使用颜色在二维图上表示两个变量的函数 我遇到过这个例子here from numpy import exp arange from pylab import meshgrid cm imshow contour clabel colo
  • Outlook 无法识别 ics 文件

    我有一些问题 我正在尝试发送 ics 文件 以便 Outlook 用户可以在他的日历中添加该事件 在某些版本中 例如 2010 它运行良好 家庭版 但在某些版本 例如商业版 上它不能直接识别它 您必须双击内容才能预览它 在另一个版本中 当我
  • 如何获取像 `source('myfile.r')` 这样的 R Markdown 文件?

    我经常有一个主要的 R Markdown 文件或knitr LaTeX 文件 我在其中source其他一些 R 文件 例如 用于数据处理 然而 我认为在某些情况下 让这些源文件成为它们自己的可重现文档 例如 R Markdown 文件不仅包
  • 要读取Excel,我们可以使用Spring Batch吗?

    我想知道是否可以使用春季批次 以便读取 Excel 文件并将其保存在数据库中 remark Excel 文件的内容每 2 小时更改一次 如果 Spring Batch 无法实现 我还可以使用什么其他解决方案 去看看Excel 的 sprin
  • Xcode 3.2.6 和 4 链接器错误 ld:bad codegen, 指针 diff in ... 到全局弱符号

    我在 Xcode 3 2 6 和 Xcode 4 中遇到非常奇怪的错误 Xcode 3 2 5 在我的项目中没有错误 默认隐藏符号选项设置为 YES 这些链接错误与模板类内的静态成员 指针 有关 有什么想法 要检查的编译器 链接器键吗 这与
  • 为什么使用“is”表达式的测试比使用runtimeType的测试更稳定?

    在 dart 游览页面上 https dart dev guides language language tour getting an objects type 这些有一个声明 用 is 表达式测试变量类型更稳定 为什么会这样呢 An i
  • 不同角色的不同API功能

    我有asp net core 2 1的API 基于声明的身份验证 是否可以将这两个api函数合二为一 Authorize Roles Admin HttpPost delete public IActionResult Delete Fro
  • XmlSerializer ,base64 编码 String 成员

    考虑一个简单的案例 public class Test public String myString 有什么方法可以告诉 XmlSerializer 在序列化时对 myString 进行 base64 编码吗 您可以简单地将其设置为byte
  • 反应 set(a) 和 set(a => a) 的区别

    case1和case2有什么区别 const a setA useState 0 setA a 1 case 1 setA a gt a 1 case 2 setA a 1 将从以下值更新a从当前外壳 setA a gt a 1 将从之前的
  • 如何在 Vim 中用编号标签替换 CSV 列分隔符?

    我想用不同的值替换一系列管道字符 我该如何使用正则表达式来做到这一点 Example This is a sentence And this is the second one 最后结果 This new is new2 a new3 se
  • 循环回到代码中的特定点

    所以我正在编写一个小游戏 我试图做一些我不明白该怎么做的事情 我定义了一个函数 当代码不满足任何条件时 我希望它返回到另一行代码 但我不明白该怎么做 这是我正在处理的代码的一部分 print What s your favourite ty
  • 序列化与内爆

    您认为在 MySQL 数据库的记录中存储一些图像 ID 的更好方法是什么 这只是图像 ID 将用于从不同的库中获取图像 我是否会像 1 4 7 9 10 12 这样破坏记录中的 id 还是只是序列化数组并存储它 使用其中一种而不是另一种是否
  • 直到在 FluentWait 中无法应用 - java

    我之前有一个 Selenium 的辅助类 它的作用就像一个魅力 突然之间 这个问题出现了 我还附上了受影响功能的屏幕截图 直到 java util function Function 在 FluentWait 中无法应用 到 org ope
  • 如何将 QWebEngineProfile 设置为 QWebEngineView

    我想将不同的 QWebEngineProfiles 设置为不同的 QWebEngineViews 这意味着每个视图都有自己的 cookie 存储 我找不到任何有关它的文档 因此我们将不胜感激所有帮助 任何将独立 cookie 存储设置为独立
  • 在 GWT 中使用查询字符串

    我必须创建一个包含用户 ID 和电子邮件参数的动态 URL 它将直接指向我的 GWT 应用程序中的注册表单 我想设置和获取查询字符串中的参数 我已经提到tphttp code google com p gwt examples source
  • 无法使用java命令行打开PDF文件

    我正在尝试使用命令行参数从 java 打开 PDF 文件 String command cmd c start AcroRd32 exe dir 但是当文件自动打开时我收到错误 Windows cannot find acroRd32 ex
  • 线程访问另一个线程的堆栈

    我的想法是否正确 线程可以访问另一个线程堆栈中存在的变量 这是假设实例化堆栈变量的函数尚未返回 我想我在某处读到线程应该只共享堆内存 但我现在怀疑这是否正确 这是在 C 中使用 POSIX pthreads 严格来说 从提供线程支持 但接口
  • 什么是 XAML 在未处理的异常和 app.g.i.cs 文件上生成的中断

    我是 Windows 应用程序开发新手 我正在尝试使用 x64 平台在本地计算机上执行解决方案 但每当我执行 Button Click 事件时 我都会收到此异常 if DEBUG DISABLE XAML GENERATED BREAK O
  • jQuery 添加的 div 上的 Google 地图 addDomListener 只能看到循环的最后一次迭代

    我有以下简单的脚本 var fruits new Array apple orange lemon fruit canvas append Mouse over these fruits for var i 0 i lt fruits le