2016-11-28 2 views
2

Ich erhalte den Fehler "Uncaught RangeError: Maximale Call-Stack-Größe überschritten" auf Chrom. hier ist meine jQuery-FunktionUncaught RangeError: Maximale Call-Stack-Größe überschritten 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'); 
      } 
     } 
    }); 

von dieser Linie $(".close-fixed-header").css('display', 'none');

+0

Statt '.css ('display', 'none');', probiere '.hide()'. Ansonsten könnten wir wirklich ein [MCVE] (http://stackoverflow.com/help/mcve) verwenden. – Cerbrus

+0

Ich würde nicht erwarten, dass 'css' von jQuery so etwas verursacht (was ein Stapelüberlauffehler ist). Wie Cerbrus sagte, brauchen wir einen [mcve]. –

+0

'scroll' Ereignis feuert viele Male ... meine Vermutung ist' .slideUp() 'ist die eigentliche Ursache –

Antwort

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'); 
     } 
    } 
}); 

Weil Sie einen Listener hinzufügen Funktion blättern, innerhalb dessen Sie slideUp tun, die eine Änderung in window.scroll Position verursacht. Was wiederum zu einer Schleife führt und zur Endlosschleife geht.

Wo ist der Fehler? Mit der anderen Möglichkeit ändern Sie die Anzeigeeigenschaft des Elements.

Was passiert genau, wenn Sie die Anzeigeposition ändern?

Wenn die css-Eigenschaft display:none für ein beliebiges Element angibt, wird dieses bestimmte Element in der Baumansicht oder in der Baumstruktur angezeigt. Das bedeutet, dass der Browser dieses bestimmte Element aus der Ansicht entfernt.

Und wenn Sie es auf display:block zurücksetzen, wird der Baum geändert und das Element wird wieder in die Ansicht eingefügt. Das ändert die Ansichtshöhe und -breite und verursacht manchmal einen Bildlauf (abhängig von der Elterngröße).

Verwandte Themen