2016-11-28 154 views
2

我在chrome上收到錯誤「Uncaught RangeError:Maximum call stack size exceeded」。這裏是我的jQuery函數未捕獲的RangeError:超出最大調用堆棧大小chrome

$(window).scroll(function(){ 
     if ($(this).scrollTop() < 170) { 
      $('#main-nav').css('position', ''); 
      $('#fixed-header-icon').slideUp().addClass('remove'); 
      if ($('.ajelnews').length > 0) { 
       $('.main-nav').removeClass('relative'); 
       $('.main-nav').css('top', ''); 
      } 
      if (!$('#main-nav').hasClass('main-nav')) { 
       $('#main-nav').removeClass("fixed-true"); 
       $(".close-fixed-header").css('display', 'none'); 
      } 
     } 
    }); 

從該行$(".close-fixed-header").css('display', 'none');

+0

而不是'.css('display','none');',嘗試'.hide()'。除此之外,我們可以真正使用[MCVE](http://stackoverflow.com/help/mcve)。 – Cerbrus

+0

我不希望jQuery的'css'導致類似的東西(這是一個堆棧溢出錯誤)。正如Cerbrus所說,我們需要一個[mcve]。 –

+0

'scroll'事件觸發很多次......我的猜測是'.slideUp()'是真正的原因 –

回答

1
$(window).scroll(function(){ 
    if ($(this).scrollTop() < 170) { 
     $('#main-nav').css('position', ''); 
     $('#fixed-header-icon').slideUp().addClass('remove'); 
     if ($('.ajelnews').length > 0) { 
      $('.main-nav').removeClass('relative'); 
      $('.main-nav').css('top', ''); 
     } 
     if (!$('#main-nav').hasClass('main-nav')) { 
      $('#main-nav').removeClass("fixed-true"); 
      $(".close-fixed-header").css('display', 'none'); 
     } 
    } 
}); 

因爲要添加監聽器滾動功能裏面,你正在做的效果基本show,這會導致window.scroll位置的變化。哪些內容導致循環並進入無限循環。

哪個是你在哪裏產生錯誤。而另一個機會是改變元素的顯示屬性。

當您更改顯示位置時會發生什麼?

當css屬性爲display:none表示任何元素時,該特定元素將熄滅視圖樹或渲染樹。這意味着瀏覽器將從視圖中移除該特定元素。

如果您將其設置回display:block,樹會發生變化並將元素放回到視圖中。這會改變視圖的寬度和寬度,並且有時會導致滾動(取決於父級大小)。

相關問題