javascript - 将 onClick 处理程序添加到从对象动态添加到 DOM 的项目

标签 javascript jquery

我需要为使用 jQuery 动态插入到 DOM 的项目添加一个点击处理程序,对象来自返回对象的服务,所以我基本上有这个(示例对象):

对象:

var items = {
    18: {
        content: "<div id=\"content18\"  > <img src=\"http://www.google.com/images/srpr/logo11w.png\">  </div>"
    },
    10: {
        content: "<div id=\"content10\"  > <img src=\"http://www.google.com/images/srpr/logo11w.png\">  </div>"
    },
    34: {
        content: "<div id=\"content34\"  > <img src=\"http://www.google.com/images/srpr/logo11w.png\">  </div>"
    },
    2: {
        content: "<div id=\"content2\"  > <img src=\"http://www.google.com/images/srpr/logo11w.png\">  </div>"
    },
    29: {
        content: "<div id=\"content29\"  > <img src=\"http://www.google.com/images/srpr/logo11w.png\">  </div>"
    },
    56: {
        content: "<div id=\"content56\"  > <img src=\"http://www.google.com/images/srpr/logo11w.png\">  </div>"
    },
    50: {
        content: "<div id=\"content50\"  > <img src=\"http://www.google.com/images/srpr/logo11w.png\">  </div>"
    },
    59: {
        content: "<div id=\"content59\"  > <img src=\"http://www.google.com/images/srpr/logo11w.png\">  </div>"
    },
    46: {
        content: "<div id=\"content46\"  > <img src=\"http://www.google.com/images/srpr/logo11w.png\">  </div>"
    },
    38: {
        content: "<div id=\"content38\"  > <img src=\"http://www.google.com/images/srpr/logo11w.png\">  </div>"
    },
    30: {
        content: "<div id=\"content30\"  > <img src=\"http://www.google.com/images/srpr/logo11w.png\">  </div>"
    },
    12: {
        content: "<div id=\"content12\"  > <img src=\"http://www.google.com/images/srpr/logo11w.png\">  </div>"
    },
    61: {
        content: "<div id=\"content61\"  > <img src=\"http://www.google.com/images/srpr/logo11w.png\">  </div>"
    },
    14: {
        content: "<div id=\"content14\"  > <img src=\"http://www.google.com/images/srpr/logo11w.png\">  </div>"
    }
};

然后我将它们添加到 DOM 中并(尝试)为每个添加的项目添加点击处理程序:

var rankingItems = $(".rankingitem"), i = 0, element;
for (var index in items) { 
        $(rankingItems[i]).after(items[index].content);
        // crete listeners
        element = $("#content"+index).click(function() {
            console.log(index);
        });
        console.log(element);
        i++;
}

问题是,无论我尝试什么,单击处理程序总是获取对象中的最后一个项目,但不会为每个项目分配单击处理程序。也许我在这里遗漏了一些东西?

添加了 JS Bin 示例:

http://jsbin.com/batadosepara/1/edit

谢谢!

最佳答案

由于回调的工作方式,您的索引将始终引用列表中的最后一个。将监听器创建包装在 IIFE 中以解决这个问题:

(function(i){
    element = $("#content"+i).click(function() {
        console.log(adIndex));
    });
})(index);

看看这个 fiddle ,了解它是如何工作的: http://jsfiddle.net/7o7bhkey/

关于javascript - 将 onClick 处理程序添加到从对象动态添加到 DOM 的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25300749/

相关文章:

jquery - UI-路由器 : How to preserve views while switching views

jquery - 单击除另一个带有 jQ​​uery 的 div 之外的任意位置时隐藏 div

javascript - JS/d3js,调用 CSV;有些数字给出 NaN 错误,有些则没有……修复?

javascript - 忽略空格和制表符的 HTML5 最小字符长度验证

javascript - 如何使用Javascript在给定句子中找到大写单词并在其前面添加一个字符?

javascript - 如何使用angularjs从数组中删除时间

javascript - 如何在 Bootstrap 中的图像顶部嵌入输入文本框?

javascript - CSS 显示的性能提升 :none or $. remove()?

javascript - 如何为多个项目添加事件监听器?

javascript - 需要将变量从 javascript 传递到 php 而无需刷新或提交