2015-06-02 2 views
0

У меня есть событие Click:Освежающий DOM между событиями щелчка

$('#undoAll').click(function(){ 
    $('#prospectTable tbody tr td a:not(.invisible)').each(function(){ 
     $(this).trigger('click'); 
    }) 
}); 

которая вызывает отдельные события щелчка.

События внутреннего щелчка в приведенном выше коде вносят изменения в DOM. Я хотел бы, чтобы эти изменения появлялись после каждого отдельного события внутреннего щелчка, чтобы пользователь мог видеть, что все происходит (событие внешнего клика может занять до 30 секунд).

К сожалению, никаких изменений в DOM не производится до тех пор, пока не будут обработаны все события кликов.

Есть ли что-нибудь, что я могу сделать, чтобы заставить DOM обновиться после каждого внутреннего щелчка?

Любая помощь будет принята с благодарностью.

+0

Это много рендеринга экрана. почему бы не позволить ему естественным образом перерисовывать/обновлять, когда он хочет и быть счастливым? – Fallenreaper

+1

Это зависит от того, что делают эти обработчики кликов. Вы можете рассмотреть возможность использования отложенных объектов + 'setTimeout'. – undefined

+2

У вас есть действие пользовательского интерфейса, которое занимает _30 секунд _ ??? – Mathletics

ответ

0

После многих часов экспериментов следующее, похоже, достигает точно желаемого эффекта.

$('#undoAll').click 
(
    function() 
    { 
     if($('#prospectTable tbody tr td a:not(.invisible)').length > 0) 
     { 
      $('#prospectTable tbody tr td a:not(.invisible)').first().click(); 
      setTimeout 
      (
       function() 
       { 
        $('#undoAll').click(); 
       }, 1 
      ); 
     }; 
    } 
); 

Проблема, кажется, что нет перерисовки или освежений в DOM, пока событие щелчка не будет завершено. SetTimeout позволяет завершить одно событие клика (разрешая перерисовку) при настройке другого.

Смежные вопросы