jquery调用buttonset来阻止其他一切

时间:2012-06-15 07:18:21

标签: javascript jquery

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

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

这最终会占据整个页面。所以我试图通过使用选择器来实现这一目的,而不是使用每个循环来定位id,如下所示:

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

更明显性能的最现实希望是更改执行顺序,使$('.checkboxViewset').buttonset();语句在当前保持的代码之后执行。

尝试以下方法:

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

编辑:

完全在另一个思路上,您可以尝试提供单个div的按钮,使用.buttonset()设置样式,然后将其克隆99次以制作100.此方法的可行性当然取决于您的div在结构上是相同的,不需要它们自己唯一的ID /值/数据。