Javascript 未捕获范围错误:超过最大调用堆栈大小
我在chrome上收到错误“UncaughtRangeError:超过最大调用堆栈大小”。这是我的jQuery函数Javascript 未捕获范围错误:超过最大调用堆栈大小,javascript,jquery,google-chrome,Javascript,Jquery,Google Chrome,我在chrome上收到错误“UncaughtRangeError:超过最大调用堆栈大小”。这是我的jQuery函数 $(window).scroll(function(){ if ($(this).scrollTop() < 170) { $('#main-nav').css('position', ''); $('#fixed-header-icon').slideUp().addClass('remove');
$(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');
}
}
});
$(窗口)。滚动(函数(){
if($(this).scrollTop()<170){
$('主导航').css('位置','');
$(“#固定标题图标”).slideUp().addClass('remove');
如果($('.ajelnews')。长度>0){
$('.main nav').removeClass('relative');
$('.main nav').css('top','');
}
if(!$('main-nav').hasClass('main-nav')){
$(“#主导航”).removeClass(“固定为真”);
$(“.close fixed header”).css('display','none');
}
}
});
从这一行开始,$(“.close fixed header”).css('display','none')代码>$(窗口)。滚动(函数(){
if($(this).scrollTop()<170){
$('主导航').css('位置','');
$(“#固定标题图标”).slideUp().addClass('remove');
如果($('.ajelnews')。长度>0){
$('.main nav').removeClass('relative');
$('.main nav').css('top','');
}
if(!$('main-nav').hasClass('main-nav')){
$(“#主导航”).removeClass(“固定为真”);
$(“.close fixed header”).css('display','none');
}
}
});
因为您正在向滚动函数添加一个侦听器,在该函数中您正在执行slideUp,这会导致window.scroll位置发生更改。哪个inturn导致循环并进入无限循环
这就是你得到错误的地方。另一种情况是,您正在更改元素的显示属性
当您更改显示位置时,会发生什么情况
当css属性对任何元素显示display:none
时,该特定元素将退出视图树或渲染树。这意味着浏览器将从视图中删除该特定图元
如果将其设置回display:block
,则树会发生更改,并将元素放回视图。这会改变视图的高度和宽度,有时会导致滚动(取决于父级大小)。而不是.css('display','none')
,请尝试.hide()
。除此之外,我们还可以使用。我不希望jQuery的css
会导致类似的情况(这是一个堆栈溢出错误)。正如Cerburs所说,我们需要一个.滚动
事件多次触发。。。我猜是。slideUp()
是真正的原因
$(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');
}
}
});