【问题标题】:Event Delegation with associated object for each DOM事件委托与每个 DOM 的关联对象
【发布时间】:2012-11-30 06:24:21
【问题描述】:

我有一些 DOM 元素,它们是通过事件和 clousure 动态创建的。

类似这样的:

    var container = document.getElementById("container");
    var objects = [{ name: "test" }, {name: "test2"}]
    for(var i = 0; i < objects.length; i+=1){
            var dom = document.createElement("div");
            dom.addEventListener("click", (function(obj){
                    return function(){
                            alert(obj.name);
                    };
            }(objects[i]), false);
            container.appendChild(dom);
    }

我的问题是如何使用事件委托?所以所有的点击事件都在#container dom 上,但仍然有与 dom 关联的 obj-object。

我想我可以使用另一个对象并将其用作“散列”表,带有 dom 元素和 obj,然后在“散列”表上使用 e.target,但没有更好的解决方案?

【问题讨论】:

    标签: javascript dom event-delegation


    【解决方案1】:

    简而言之(未测试):

    var container = document.getElementById("container");
        var objects = [{ name: "test" }, {name: "test2"}]
        for(var i = 0; i < objects.length; i+=1){
                var dom = document.createElement("div");
                objects[i].instance = dom;
                container.appendChild(dom);
        }
    
    container.addEventListener("click",function(event){
          for(var i in objects){
          if(event.target == objects[i].instance){
           alert(objects[i].name);
           break;
          }
    }
    }, false);
    

    【讨论】:

    • 好吧,它看起来和我想的一样,但是我没有添加 .instance 我做了类似 { domElement1: obj01], domElement2: obj[1] } 所以我不更新对象 [] 中的对象。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    相关资源
    最近更新 更多