1

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

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

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

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

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

4

1 回答 1

1

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

可以说,任何 javascript 语句都“阻止”了同一事件线程中(按时间顺序)在它之后出现的所有其他语句,并且可能(因为 javascript 是单线程的)未来线程的整体。

考虑到这一点,我认为这里的重点不是.buttonset()支撑一切,而是它很慢(当应用于 100 个容器时)并且它固有的缓慢是无法克服的,除非你能够找到/编写一个替代插件跑得更快。

对于更好的表观性能,您最现实的希望是更改执行顺序,以便您的$('.checkboxViewset').buttonset();语句在它当前持有的代码之后执行。

尝试以下操作:

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

编辑:

完全在另一条思路上,您可以尝试提供单个 div 的按钮价值,对其进行样式设置,.buttonset()然后将其克隆 99 次以达到 100。这种方法的可行性当然取决于您的 div 在结构上相同并且不需要它们拥有唯一的 ID/值/数据。

于 2012-06-15T09:16:37.040 回答