javascript - 将所有元素的点击绑定(bind)替换为单个文档(('click')?

标签 javascript jquery performance onclicklistener dom-events

我总是向每个需要监听的单独元素添加点击监听器,这可能会创建一个带有大量事件绑定(bind)的大而困惑的 Javascript。

我现在正在考虑用另一种方式来做;通过将单击事件绑定(bind)到整个文档,并在单击时查看目标元素是否具有“data-action”属性,如果存在,则执行其中的函数。这样点击:

<a href="#" data-action="ajax_load_stuff"></a>

将执行函数ajax_load_stuff()

这将使我的代码更加简洁,尤其是在 ajax 环境中,但我想了解此方法的性能和效率。这种方法有什么缺点吗?

<小时/>

更新代码示例:

document.body.addEventListener("click", function (e) {
    if (e.target) {
        var action = e.target.getAttribute("data-action");
        if (action) {
            e.stopPropagation();
            var params = e.target.getAttribute("data-params");
            var data = [];
            if (params) {
                data = params.split(',');
            }
            window[action].apply(e.target, data);
        }
    }
}, false);

最佳答案

当然,这种方法有几个优点和缺点。

首先讨论缺点。

  1. 需要完美地处理事件传播,否则可能会使您的系统变慢。
  2. 向点击事件传递参数会很困难。也许需要引入另一个属性,例如:data-action-param

优点:

  1. 更少的事件处理代码。

关于javascript - 将所有元素的点击绑定(bind)替换为单个文档(('click')?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34577110/

相关文章:

javascript - 移动按钮不起作用( Bootstrap )

jquery - 使用 JQuery 返回默认颜色

java - 创建文件架构的最小 mkdir 数量

javascript - ReactJS 组件不渲染带有状态变量的文本区域

javascript - 删除容器外的所有元素?

javascript - 使用jquery在div中添加输入字段后,表单在回车时提交

css - 为什么在 CSS3 中启用硬件加速会降低性能?

javascript - jQuery datepicker 在前端工作但不是 wordpress admin dash

php - 防止 SQL 注入(inject)的建议

javascript - 在 JavaScript 循环中更新页面