javascript - 触发元素/节点列表的更改太慢

标签 javascript dom-events

我想要重置的 div 内有很多复选框。他们所有人都有相同的变化事件。单击重置按钮时,将比较当前属性和 data-default,如果不同,则将属性设置为此值并触发更改事件。

Data-default 是页面加载时或通过 ajax 保存部分时设置的复选框的选中状态。

var $checkboxes = $section.find(":checkbox");

for (var i = 0; i < $checkboxes.length; i++) {
    var $cb = $($checkboxes[i]);

    var currentValue = $cb.prop("checked");
    var defaultValue = $cb.data("default");

    if (currentValue !== defaultValue) {
        $cb.prop("checked", defaultValue)
            .trigger("change");
    }
}

这里的问题是性能。使用 jquery 触发 70 个复选框的更改事件大约需要 1 秒。当有 1000 个复选框需要重置时,大约需要 5 分钟(如果浏览器不崩溃)。

有没有更好的方法来触发对象数组的 onchange 事件,也许使用普通的 javascript?

最佳答案

您的代码似乎没有太大问题。您的回调中可能存在性能瓶颈。你可以做一件事。如果您使用 Chrome,则可以使用 Chrome Profiler,它会准确地告诉您您的时间都花在哪里了。开发者工具中有一个性能选项卡,可以帮助您解决问题。

关于javascript - 触发元素/节点列表的更改太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46296572/

相关文章:

javascript - 如何让函数与 .onsubmit 事件一起运行?

javascript - 客户端和服务器端编程有什么区别?

Javascript限制文本输入字符

javascript - vAxis 值在条形图中不可见 : Google Charts

javascript - "Object doesn' t support..."IE8 在声明普通变量时停止

javascript - 在内容的任何地方搜索而不是开始

javascript - div 中仅附加了一个 <br> 元素

javascript - SharePoint Rest 文档库

javascript - 如何使用柯里化(Currying)函数删除事件监听器

javascript - 'currentApple' 已经定义在 jslint 中显示