2012-08-21 2 views
0

Когда вызывается функция removeCell(), firefox замерзает.Firefox зависает при вызове функции (jquery)

Я использую эту функцию, чтобы скрыть некоторые ячейки сетки, в зависимости от ширины окна.
Функция называется rigth после того, как сетка готова и для каждого изменения размера окна.
В Chrome и Opera работает нормально, но в Firefox он запускается сразу после первого вызова.

function removeCell(){ 
    headerResize(); 
    if (($('.section .header .cell:last-child').position().left + $('.section .header .cell:last-child').width()) > 
     $('.section .header').position().left + $('.section .header').width()) 
    { 
     var priority = $body_grid_header[0].priority; 
     var index = 0; 

     for(var i in $body_grid_header){ 
      if(bool($body_grid_header[i].visible) && $body_grid_header[i].priority > priority){ 
       priority = $body_grid_header[i].priority; 
       index = i; 
      } 
     } 
     $body_grid_header[index].visible = 0; 
     $('.grid .header .cell:nth-child('+ (parseInt(index)+2) +')').addClass('hidden'); 

     $hiddenArray.unshift(index); 
     headerResize(); 
     removeCell(); 
    } 
    else 
    { 
     //console.log($body_grid_header); 
     var firstCell = $('.grid .header .cell:first-child').width(); 
     var lastCell = $('.grid .header .cell:last-child').width(); 
     var headerWidth = $('.grid .header').width(); 
     var cellCount = $('.grid .header .cell').not(':first').not(':last').not('.hidden').length; 

     if ((cellCount*100 + 100+firstCell+lastCell < headerWidth) && (cellCount < $body_grid_header.length)) 
     { 
      var index = $hiddenArray[0]; 
      $hiddenArray.splice(0,1); 

      $body_grid_header[index].visible = 1; 
      $('.grid .header .cell:nth-child('+ (parseInt(index)+2) +')').removeClass('hidden'); 
      headerResize(); 
      removeCell(); //I GUESS IT STUCKS HERE! 
     } 
    } 
} 


function headerResize(){ 
    var firstColl = $('.grid .header .coll:first-child').width(); 
    var lastColl = $('.grid .header .coll:last-child').width(); 
    var headerWidth = $('.grid .header').width() - firstColl - lastColl; 
    var collCount = $('.grid .header .coll').not(':first').not(':last').not('.hidden').length; 
    var collWidth  = headerWidth/collCount - 1; //-1 = border-left 

    if(collWidth < 100) collWidth = 100; 

    $('.section .header .coll').not(':first').not(':last').width(collWidth); 
    $('.section .content .coll:not(:first-child)').width(collWidth); 

}

+0

Вы отлаживались, когда происходит замораживание? – Amberlamps

+0

Код, который вы написали, не является рекурсивным .... передайте значение i в removeecell() – thecodejack

+0

@CodeJack: What 'i'? Он имеет рекурсию, которая существует в противном случае, если проверка состояния не выполняется. О чем ты говоришь? –

ответ

0

Код может привести к тупиковой ситуации в любом браузере, так как она сводится к:

removeCell() { 
    removeCell(); 
} 

Единственное, что мешает, что находится в else Ответвления if():

if ((cellCount*100 + 100+firstCell+lastCell < headerWidth) && (cellCount < $body_grid_header.length)) 

Если это условие неверно, у вас есть бесконечный цикл ,

Вместо рекурсивных вызовов вы должны действительно работать с циклом и выходить из него, когда все ячейки были удалены.

+0

i thght same..but it dont ... else имеет еще одно условие – thecodejack

+0

Chrome консоль не показывает никаких ошибок ... – Clem

+0

означает, что он идеально создает сетки ???? – thecodejack

0

Трудно следовать, очень трудно проверить локально :-)

Чтобы дать ему шанс, изменить

if ((cellCount*100 + 100+firstCell+lastCell < headerWidth) && (cellCount < $body_grid_header.length)) 

в

if ((cellCount*100 + 100+firstCell+lastCell < headerWidth) && $hiddenArray.length) 

Надеются, что это работает ...

+0

Нет, это не работает ...:/ В этом случае нет замерзания, но теперь он не отображает ячейки, когда есть достаточно места ...:/ – Clem

+0

стыд. возможно, вы можете настроить jsfiddle, тогда вам будет проще помочь – Searle

+0

Я пытаюсь настроить jsfiddle, но это очень много работы:> – Clem

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