Javascript jQuery.resize()赢了';t触发函数

Javascript jQuery.resize()赢了';t触发函数,javascript,jquery,resize,Javascript,Jquery,Resize,我已经在我的网站上写了一个调整菜单块大小的函数。然后我将函数设置为在加载的窗口和调整大小的窗口上执行。它在.load()上可以正常工作,但在.resize()上没有任何效果。我可以看到它函数正在被调用,因为它会触发警报,但它不会从函数中实际调整大小 我知道这个函数可以工作,因为如果你刷新窗口,它会触发这个函数,菜单块也会调整大小。我还知道,正在访问.resize()和函数,因为它会在调整窗口大小时触发警报,但函数实际上不会调整div的大小 我用.bind('resize',function(){

我已经在我的网站上写了一个调整菜单块大小的函数。然后我将函数设置为在加载的窗口和调整大小的窗口上执行。它在
.load()
上可以正常工作,但在
.resize()
上没有任何效果。我可以看到它函数正在被调用,因为它会触发警报,但它不会从函数中实际调整大小

我知道这个函数可以工作,因为如果你刷新窗口,它会触发这个函数,菜单块也会调整大小。我还知道,正在访问
.resize()
和函数,因为它会在调整窗口大小时触发警报,但函数实际上不会调整div的大小

我用
.bind('resize',function(){})
$(window)尝试过它
并使用
setInterval(函数(){},300)
检查窗口大小是否已更改,并且它们都具有相同的结果

我的函数如下所示:

函数changeWidth(){
警报(“调整大小”);
var-widtblock=0;
$('.menu-block')。每个(函数(){
if($(this).width()>widtblock){
WidtBlock=$(this).width();
}
});
$('.menu-block')。每个(函数(){
$(此).width(宽块);
});
}
更新:制作菜单组件

我们需要有一个菜单,其中的项目具有相同的宽度,根据最宽的项目或窗口宽度计算

函数菜单项($){
var self=这个;
//如果要计算可用宽度,请将其设置为true
self.basedOnWindowWidth=false;
self.selector='#resizeblemenu';
self.menu=$(self.selector);
self.meta=null;
self.updateItemsWidth=函数(){
变量id='resizableMenuStyle';
变量样式=$(“#”+id);
如果(样式长度<1){
样式=$(“”{
id:id
}).appendTo(“head”);
}
html(self.selector+'a{width:'+self.meta.maxWidth+'px;}');
回归自我;
};
self.study=功能研究菜单(){
var res={
项目通知:0,
最大宽度:0,
宽度:0,
身高:0
};
var items=self.menu.find('>li');
res.itemsCount=items.length;
res.width=self.menu.outerWidth();
res.height=self.menu.outerHeight();
if(self.basedOnWindowWidth){
res.maxWidth=window.innerWidth;
}否则{
项目。每个功能(索引、项目){
宽度=$(项).width();
(res.maxWidth>宽度)| |(res.maxWidth=宽度);
});
}
self.meta=res;
回归自我;
};
self.study().updateItemsWidth();
var信号量;
$(窗口)。调整大小(函数(事件){
clearTimeout(信号量);
信号量=window.setTimeout(函数(){
返回$
.when(console.count('Window Resize End'))
.然后(函数(){
回归自我学习();
})
.然后(函数(){
返回console.log('调整大小后的菜单元数据',self.meta);
})
.然后(函数(){
self.updateItemsWidth();
})
;
}, 200);
});
}
jQuery(document).ready(MenuCtrl)
*,*:之后,*:之前{
-webkit框大小:边框框;
框大小:边框框;
}
html,body,.nav{
填充:0;
保证金:0;
最大宽度:100%;
}
.导航{
列表样式:无;
显示:内联块;
背景:红色;
}
.导航a{
显示:内联块;
填充:.5em 1.5em;
背景:黄色;
过渡:400ms宽线性;
}
李国荣先生{
边缘:.5em0;
最大宽度:100%;
}


按照您开始的方式,您可以尝试这样做:

function changeWidth() {
  var widestBlock = 0;
  $('.menu-block').each(function() {
    if ($(this).width() > widestBlock) {
      widestBlock = $(this).width();
      console.log(widestBlock)
    }
  });

  $('.menu-block').each(function() {
    $(this).width(widestBlock);
  });
}


$(window).load(function(){
  changeWidth();
})

$(document).ready(function(){
    $(window).resize(function() {
      changeWidth();

    });
});

你实际上是如何调整窗口大小的!?这是一个奇怪的问题应为
$(窗口)。加载(更改宽度)
,否则您将立即调用
changeWidth
,并将其返回值传递给
。加载
,或者更好地使用
$(changeWidth)
以确保在DOM就绪后执行。@AdamAzad我只是在更改浏览器窗口的大小。尽管在较小的设备上查看,它仍然会调整大小。只有在调整窗口大小时,它才不起作用。@csum你是对的,我做了那个改变,但奇怪的是,它似乎在两种方式中都起作用。我使用$(窗口)而不是$(文档),因为我正在使用ajax请求呈现菜单,所以我需要等待窗口完成加载$Hitmands,感谢您的回答,我尝试了一些变体,但无法使其工作。另外,您如何声明
信号量
变量?嘿@cascadijs,有一个错误,我们需要在该函数的范围之外声明变量。但是,你能详细解释一下你在找什么吗?我会帮助你,但我需要更多的信息:)再次感谢,我会尝试更好地解释:我有一个包含不同长度菜单标题的div菜单,这给了它们不同的宽度,所以我写了一个函数来检查最宽块的宽度,并使所有块都具有相同的宽度。当它在
$(窗口)上被触发时,这就是我希望它的工作方式。load()
但是当我尝试使用
$(窗口)的一些变体时。load()
changeWidth函数不会被触发,即使它会从函数内部触发警报和控制台日志。谢谢你的回答,但它原来是.width()由于某种原因造成问题。我会把答案贴在上面的问题上