jquery调用按钮集,保持其他一切

jquery call to buttonset holding up everything else

本文关键字:其他 调用 按钮 jquery      更新时间:2023-09-26

我的页面上有几个div(大约100个左右)类'checkboxViewset'。我尝试使用类名选择器对div 进行按钮集调用,如下所示:

$('.checkboxViewset').buttonset();

这最终会占用整个页面。因此,我尝试通过使用选择器来定位ids而不是使用每个循环来执行此操作,如下所示:

$('[id^=viewBoxlatest_]').each(
     function (index)
     {
        $(this).buttonset();
     }
);

这最终仍然会保留页面上的其他所有内容。是否有任何解决方案可以使这些调用异步,而不是保留页面中的所有其他活动?

冒着不给你太多希望的风险....

可以说,任何 javascript 语句都"保留"了在同一事件线程中(按时间顺序)出现的所有其他语句,并且可能(因为 javascript 是单线程的)整个未来线程。

考虑到这一点,我认为这里的重点不是.buttonset()保持其他所有内容,而是它很慢(当应用于 100 个容器时),并且它固有的缓慢是无法克服的,除非您能够找到/编写运行更快的替代插件。

获得更好的表观性能的最现实希望是更改执行顺序,以便$('.checkboxViewset').buttonset();语句在当前保存的代码之后执行。

尝试以下操作:

  • 将语句移动到它所在的事件处理程序的底部。
  • 将语句放在其自己的延迟触发的 $(function(){...}) 处理程序中。
  • 将 jQuery 的其余部分放在 $(function(){...}) 处理程序中,将语句放在它自己的 window.onload = function(){...} 处理程序中。这里的惩罚是,用户很可能会在应用样式之前获得无样式内容的 Flash buttonset() FOUC。

编辑:

在另一个思路上,你可以尝试提供单个div的按钮,用.buttonset()来设计它,然后克隆它99次,使100个。这种方法的可行性当然取决于您的div在结构上相同,并且不需要它们自己唯一的ID/值/数据。