javascript - 使用事件委托(delegate)时如何访问与元素关联的数据

标签 javascript performance dom-events event-delegation

我在 n 行上使用事件委托(delegate),我的旧方法是将每一行与事件绑定(bind),代码如下所示:

function getDiv (data) {
    var div = $("<div class='theDiv'>");

    div.click(function () {
        console.log(data);
    });

    return div;
}

function getContainer() {
    var i, container;

    container = $("<div class='container'></div>");
    for (i = 0 ; i < 1000 ; i++) {
        container.append(getDiv(i));
    }
    return container;
}

$("body").append(getContainer());

注意:在这种方法中,每个行元素 (theDiv) 都可以访问其数据。

现在的问题是,我想绑定(bind)对容器的单击并访问数据,事件委托(delegate)方法如下所示:

function getNewDiv (data) {
    var div = $("<div class='theDiv'>");

    return div;
}

function getNewContainer() {
    var i, container;

    container = $("<div class='container'></div>");
    for (i = 0 ; i < 1000 ; i++) {
        container.append(getNewDiv(i));
    }

    container.click (function (e) {
        var targetElem = e.target;
        console.dir(e);
        if ($(targetElem).hasClass("theDiv")) {
            console.log("row was clicked");
        }
    })

    return container;
}

$("body").append(getNewContainer());

现在,如何访问与每一行关联的数据?

根据我的学习: 我可以将数据添加到

  • data-*,但这会将我限制为简单的数据类型
  • 与元素关联的$.data

还有其他方法吗?

最佳答案

.on 允许您进行事件委托(delegate):

container.on('click', '.theDiv', function () {
    //`this` is `.theDiv`.
});

关于javascript - 使用事件委托(delegate)时如何访问与元素关联的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14889248/

相关文章:

javascript - 我如何订阅(或观察)DOM 窗口并在任何更改时回调;不仅仅是窗口调整大小事件、滚动事件等?

javascript - 正则表达式,用于匹配包含一个单词但不包含另一个单词的URL

c++ - 对两个连续测量进行基准测试时不一致

c# - 检查之前,还是管理异常?

linux - Ubuntu Linux 中的异步 IO io_submit 延迟

javascript - 在 Chrome 中的窗口上停止滚动之前,滚动事件不会触发

javascript - 三个Js Texture不会出现

javascript - Bootstrap 4 最新版本轮播按钮不工作

javascript - 给 HTML 时间来呈现其文本

javascript - 添加跟踪事件和单击对象的事件监听器?