2012-06-15 2 views
1

У меня есть несколько div (около 100 или около того) класса 'checkboxViewset' на моей странице. Я попытку buttonset вызов на дивы, используя селектор Classname, как показано ниже:jquery call to buttonset up up all else

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

Это заканчивает задерживая всю страницу. Так что я попытался сделать это, используя селектор по ориентации идентификаторов вместо с каждой петлей, как показано ниже:

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

Это еще заканчивается проведение всего остального на этой странице. Есть ли решение сделать эти вызовы асинхронными, а не удерживать все остальные действия на странице?

+0

Можем ли мы иметь представление о том, что делает buttonet()? – Angel

+0

@Angel: buttonset() является частью структуры пользовательского интерфейса JQuery. Пожалуйста, обратитесь к http://jqueryui.com/demos/button/#radio – ivarrian

ответ

1

Рискуя не дает вам большие надежды ....

Можно сказать, что любой оператор Javascript «держит» все другие заявления, что приходит (в хронологическом порядке), после него в том же потоке событий, и потенциально (поскольку javascript является однопоточным) будущие потоки полностью.

С учетом этого, я думаю, здесь дело не столько в том, что .buttonset() держит все остальное, но что оно медленное (когда применяется к 100 контейнерам) и что его присущая медлительность непреодолима, если вы не можете найти/напишите альтернативный плагин, который работает быстрее.

Ваша самая реалистичная надежда на лучшую кажущуюся производительность - изменить порядок выполнения так, чтобы ваш оператор $('.checkboxViewset').buttonset(); выполнялся после кода, который он в настоящее время удерживает.

Попробуйте следующее:

  • Переместить заявление в нижней части обработчика событий, в котором он сидит.
  • Поместите заявление в свой собственный обработчик $ (function() {...}).
  • С остальной частью вашего jQuery в обработчике $ (function() {...}) поместите инструкцию в свой собственный обработчик window.onload = function(){...}. Штраф здесь заключается в том, что пользователи, скорее всего, получат Flash из нестерпимого контента (FOUC) до применения стиля buttonset().

Edit:

На другой поезд мысли целиком, вы могли бы попробовать служить ценность одной Div по кнопкам, укладка его с .buttonset() затем клонировать его в 99 раз, чтобы сделать 100. Жизнеспособность этого подхода конечно, зависит от того, что ваши divs структурно идентичны и не требуют собственных уникальных идентификаторов/значений/данных.

+0

Спасибо за ваши предложения. Поистине ценим это. Я собираюсь попытаться сделать поздний обстрел вызовов набора кнопок. Я думаю, что FOUC намного более приемлема, чем ожидающий пользователя (для того, что кажется неопределенным ожиданием). – ivarrian