Javascript 函数调用一次时换行

Javascript 函数调用一次时换行,javascript,jquery,html,css,Javascript,Jquery,Html,Css,当我在这里帮助另一位成员时,我遇到了一个我自己的问题 请看下面的代码: 并前后收缩窗格。您会注意到菜单项按其应有的方式填充更多菜单 然而,我在我的JS的底部这样做: detectOverflow(); $('.overflow-items ul').reverseChildren(); detectOverflow(); 因为如果我只在菜单处于某个位置时,在初始加载时调用该函数一次: 您可以删除其中一个函数调用,如下所示: detectOverflow(); $('.overflow-ite

当我在这里帮助另一位成员时,我遇到了一个我自己的问题

请看下面的代码:

并前后收缩窗格。您会注意到菜单项按其应有的方式填充更多菜单

然而,我在我的JS的底部这样做:

detectOverflow();
$('.overflow-items ul').reverseChildren();
detectOverflow();
因为如果我只在菜单处于某个位置时,在初始加载时调用该函数一次:

您可以删除其中一个函数调用,如下所示:

detectOverflow();
$('.overflow-items ul').reverseChildren();
一旦开始调整I映像的大小,问题就会自行解决,因为此时会再次调用该函数

我花了几个小时试图清理我的代码并找出原因,但我似乎无法找出原因。

问题在于“更多”菜单,更准确地说,
padding right
属性,当项目位置被查看时,菜单被隐藏,导航包装器没有应用“padding right”样式,因此,第三个元素放置在第一个导航行中,但当显示“更多”菜单并应用填充时,第三个元素将换行到新的行中

我会设置一个初始的正确填充值来计算项目的位置:

我改变了一些将项目传递到“更多”菜单的方式,以避免在应用补丁后产生二次效果,因为项目会立即移动,在某些情况下,元素(例如,第三个较大的元素)会移动到“更多”菜单,但第四个元素会显示在主导航栏中,因为它较小。为了解决这个问题,我在处理完所有项目后,将所有元素移动到“更多”菜单。新代码不应该有任何问题

detectOverflow()中的新代码是:


这似乎只发生在您的编辑中,而在以前的版本中,这并没有发生。但我认为你说的菜单是问题的根源是对的,只要想办法动态插入该值,因为菜单并不总是存在。@MarioD,请看一下新版本,问题已经解决了。
$('.primary-nav-wrapper').css('padding-right', 40);

// Initial run of detect Overflow
detectOverflow();
$('.overflow-items ul').reverseChildren();
//detectOverflow();
    var more_items = []
    $('.primary-nav li').each(function () {
        if (more_items.length > 0) {
            more_items.push($(this))
            return;
        }
        var $this = $(this),
            elemPos = $this.position().top - ulPos;
        // Figure out the width of the combined li margins
        liTotalWidth = liTotalWidth + parseInt($(this).css('marginLeft'), 10) + $(this).outerWidth();

        // Check if the link dropped down to the second line
        // If it did put it in the more menu
        if (elemPos > 0) {
            more_items.push($this);
        }
    });

    $(more_items).each(function() {
        $(this).prependTo('.overflow-items ul');
        liCount = $('.primary-nav li').length;
    });