javascript - JQuery悬停仅适用于最后一个元素?

标签 javascript jquery

我在使用 javaScript 和 jQuery 理解范围和生命周期时遇到了一些困难。我有一个函数,它接受自定义对象数组(gps 是组数组)

var currentGroup;
for(var index = 0, length = gps.length; index < length; ++index)
{
    currentGroup = gps[index];
    var newGroup = $('<li id="groupno-' + currentGroup.getID() + '"><span class="group">Group ' + currentGroup.getID() +'</span></li>');

    newGroup.hover(
        function() {newGroup.find("span.group").append(GetGroupActionsContainer(currentGroup.getID()));},
        function() {newGroup.find("span.group > .GroupActionsContainer").remove();}
    );

    gl.append(newGroup);
    gl.treeview({
        add: newGroup
    });
}

因此,这会通过 GPS 进行查找并将 currentGroup 作为对象进行检索。然后它创建一个新对象(目前命名为 newGroup,令人困惑,将重命名它),它是一个包含 li 的 jQuery 对象。

gl 是 <ul>在页面上。

问题:该函数正确添加了新的 <li><ul>由 gl 表示 - 我的列表显示所有元素。但悬停仅适用于最后一个元素:如果我有 2 个以上项目并将鼠标悬停在其中任何一个上,我会看到最后一个 <li> 上由悬停功能创建的图标.

有谁知道这里可能出了什么问题吗?我猜测不知何故, .hover 不适用于该对象,而是适用于在循环迭代时更新的某些引用,但这纯粹是猜测。

最佳答案

悬停函数中捕获的 newGroup 引用循环中创建的最后一个组。在悬停函数中使用 $(this) 来引用悬停元素。

newGroup.hover(
    function() {
        var $this = $(this);
        var groupID = $this.attr('id').replace( /groupno-/, '');
        $this.find("span.group").append(GetGroupActionsContainer(groupID));
    },
    function() { $(this).find("span.group > .GroupActionsContainer").remove(); }
);

关于javascript - JQuery悬停仅适用于最后一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1538690/

相关文章:

javascript - 无法使用 prev、prevAll 或 closest 访问 SPAN 类

javascript - 用函数定义函数

javascript - Cookie 仅在不使用 JSON.stringify 时设置

javascript - 如何使用 Javascript/jQuery 隐藏/显示启用/禁用 HTML 元素?

javascript - 如何选择多个值或在jquery中搜索和设置值

javascript - jquery 或 JS 创建子元素并分配一个 ID

javascript - 如何获取按钮单击 Angular 对象值?

javascript - 表单验证检查两个字段是否相等

javascript - 防止 jQuery 高级新闻行情指示器中的循环( fork /修改)

javascript - jQuery $(function() {}) vs (function () {})($)