javascript - 单击检查所有按钮问题

标签 javascript html css

我有一个选中所有按钮,单击它会选中所有复选框。但是在我的显示页面上,我有 30000 个复选框,这让我在单击“全部选中”按钮时页面没有响应。有人可以帮忙吗。

function js_select_all(btn,theForm){
   if (btn.value == "Check All")  {
       var checkval = "checked";
       if (js_one_row(theForm.circSelected)) {
           theForm.circSelected.checked = checkval;
       } else {
           for (var i=0; i < theForm.circSelected.length; i++){
               theForm.circSelected[i].checked = checkval;
           }
       }
       btn.value ="Uncheck All";
   }else {
       if (js_one_row(theForm.circSelected)) {
           theForm.circSelected.checked = false;
       } else {
           for (var i=0; i < theForm.circSelected.length; i++){
               theForm.circSelected[i].checked = false;
           }
       }
       btn.value = "Check All";
    }
}

有人能帮助我以最快的方式实现结果吗?我正在开发一个仅支持 HTML、CSS 和 JS 的网络工具包。

最佳答案

将任务分成更小的 block ,并在使用 setTimeout 短暂延迟后运行它们

这允许浏览器保持响应。大概所有复选框都立即更改状态不是必需的吗?用户可能会很高兴计算机正在勾选方框,即使这需要一些时间,否则用户将不得不自己做。

这是一个示例,我们将其分成 100 个复选框的 block ,每个 block 以 1000 毫秒的间隔完成。

const chunkSize=100;
const intervalBetweenChunksMs = 1000;
for (var i=0; i < theForm.circSelected.length ; i+=chunkSize) { 
  console.log("Creating chunk starting at",i)
  setTimeout(function(start){for(var j=start; j<Math.min(i+chunkSize,33); j++) 
    { 
      console.log("Doing item number", j);
      theForm.circSelected[j].checked = checkval;

    }
  }(i),(1 + theForm.circSelected.length/chunkSize)*intervalBetweenChunksMs ) 
}

如果原则上可行,您可能希望尝试更小的间隔,以便在合理的时间范围内完成完整的“波浪”检查。

我输入了“1+”,以便第一个 block (从元素编号 0 开始)仅在一个间隔后出现。如果这在第一次可见更改之前引入了 Not Acceptable 滞后,则删除“1+”。

关于javascript - 单击检查所有按钮问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44044044/

相关文章:

javascript - 如何在 Plotly 中将图例放在顶部而不是底部?

Javascript/PHP 重定向

css - 移除 Bootstrap WELL 左右填充

javascript - 输入键上的 HTML textarea 换行符不起作用

javascript - WooCommerce - 从单独的 PHP 文件访问 'WC_Order'

javascript - 使用 Javascript 设置正文左边距

html - 我不关心缓存或性能——有什么理由不应该使用嵌入式 CSS?

javascript - 在 Javascript 或 HTML5 中尝试两个无需用户交互的下载链接

html - 如果检测到 ie9 或无法使用渐变功能,请替换渐变色

javascript - [Vue警告] : Property or method is not defined