javascript - 为什么我的所有按钮的下拉内容都相同

标签 javascript jquery html css twitter-bootstrap

我的页眉中有两个按钮,但是当我单击两个按钮时,内容是相同的。 enter image description here

enter image description here

这就像当我点击一个按钮时我同时点击了两个我不知道为什么。

我认为问题出在我的 jquery 中:

jQuery(document).ready(function($){
//open/close mega-navigation
$('.cd-dropdown-trigger ').on('click', function(event){
    event.preventDefault();
    toggleNav();
});

//close meganavigation
$('.cd-dropdown .cd-close ').on('click', function(event){
    event.preventDefault();
    toggleNav();
});

//on mobile - open submenu
$('.has-children').children('a').on('click', function(event){
    //prevent default clicking on direct children of .has-children 
    event.preventDefault();
    var selected = $(this);
    selected.next('ul').removeClass('is-hidden').end().parent('.has-children').parent('ul').addClass('move-out');
});

//on desktop - differentiate between a user trying to hover over a dropdown item vs trying to navigate into a submenu's contents
var submenuDirection = ( !$('.cd-dropdown-wrapper #botao1').hasClass('open-to-left') ) ? 'right' : 'left';
$('.cd-dropdown-content').menuAim({
    activate: function(row) {
        $(row).children().addClass('is-active').removeClass('fade-out');
        if( $('.cd-dropdown-content .fade-in').length == 0 ) $(row).children('ul').addClass('fade-in');
    },
    deactivate: function(row) {
        $(row).children().removeClass('is-active');
        if( $('li.has-children:hover').length == 0 || $('li.has-children:hover').is($(row)) ) {
            $('.cd-dropdown-content').find('.fade-in').removeClass('fade-in');
            $(row).children('ul').addClass('fade-out')
        }
    },
    exitMenu: function() {
        $('.cd-dropdown-content').find('.is-active').removeClass('is-active');
        return true;
    },
    submenuDirection: submenuDirection,
});

//submenu items - go back link
$('.go-back').on('click', function(){
    var selected = $(this),
        visibleNav = $(this).parent('ul').parent('.has-children').parent('ul');
    selected.parent('ul').addClass('is-hidden').parent('.has-children').parent('ul').removeClass('move-out');
}); 

function toggleNav(){
    var navIsVisible = ( !$('.cd-dropdown').hasClass('dropdown-is-active') ) ? true : false;
    $('.cd-dropdown').toggleClass('dropdown-is-active', navIsVisible);
    $('.cd-dropdown-trigger').toggleClass('dropdown-is-active', navIsVisible);
    if( !navIsVisible ) {
        $('.cd-dropdown').one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend',function(){
            $('.has-children ul').addClass('is-hidden');
            $('.move-out').removeClass('move-out');
            $('.is-active').removeClass('is-active');
        }); 
    }
}

//IE9 placeholder fallback
//credits http://www.hagenburger.net/BLOG/HTML5-Input-Placeholder-Fix-With-jQuery.html
if(!Modernizr.input.placeholder){
    $('[placeholder]').focus(function() {
        var input = $(this);
        if (input.val() == input.attr('placeholder')) {
            input.val('');
        }
    }).blur(function() {
        var input = $(this);
        if (input.val() == '' || input.val() == input.attr('placeholder')) {
            input.val(input.attr('placeholder'));
        }
    }).blur();
    $('[placeholder]').parents('form').submit(function() {
        $(this).find('[placeholder]').each(function() {
            var input = $(this);
            if (input.val() == input.attr('placeholder')) {
                input.val('');
            }
        })
    });
}
   });

我的 html:

    </head>
    <body>

        <header>
        <nav class="navbar navbar-default navbar-custom" role="navigation">
            <div class="container">
                <a class="navbar-left" href="#"><img src="assets/img/logo-01.png" style="max-width:70px"/></a>
                <div class="navbar-header navbar-left">
                    <button type ="button"  class="navbar-toggle" data-toggle="collapse" data-target="#collapse-1">
                        <span class="sr-only"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>    

           <div class="collapse navbar-collapse js-navbar-collapse">
            <ul class="nav navbar-nav">
                <div class="cd-dropdown-wrapper">
                <button type="button" data-toggle="dropdown" id="botao1" class="btn btn-default dropdown-toggle cd-dropdown-trigger">Categorias</button>

                <nav class="cd-dropdown">

            <a href="#0" class="cd-close">Close</a>
            <ul class="cd-dropdown-content">

                <li class="has-children">
                    <a href="http://codyhouse.co/?p=748">Eletrodomésticos</a>

                    <ul class="cd-secondary-dropdown is-hidden">
                        <li class="go-back"><a href="#0">Menu</a></li>
                        <li class="see-all"><a href="http://codyhouse.co/?p=748">Todos os eletrodomésticos</a></li>
                        <li class="has-children">
                            <a href="http://codyhouse.co/?p=748">Eletrodomésticos</a>

                            <ul class="is-hidden">
                                <li class="go-back"><a href="#0">Eletrodomésticos</a></li>
                                <li class="see-all"><a href="http://codyhouse.co/?p=748">Todos os eletrodomésticos</a></li>
                                <!--<li class="has-children">-->
                                <li><a href="#0">Grandes Eletro de cozinha</a></li>
                             <!-- Funcionalidade para colocar dps outras subcategorias, não para já!
                                    <ul class="is-hidden">
                                        <li class="go-back"><a href="#0">Accessories</a></li>
                                        <li class="see-all"><a href="http://codyhouse.co/?p=748">All Benies</a></li>
                                        <li><a href="http://codyhouse.co/?p=748">Caps &amp; Hats</a></li>
                                        <li><a href="http://codyhouse.co/?p=748">Gifts</a></li>
                                        <li><a href="http://codyhouse.co/?p=748">Scarves &amp; Snoods</a></li>
                                    </ul>-->

                                <!--<li class="has-children">-->
                                <li><a href="#0">Eletrodoméstico de Limpeza</a></li>
                                <!-- Funcionalidade para colocar dps outras subcategorias, não para já!
                                    <ul class="is-hidden">
                                        <li class="go-back"><a href="#0">Accessories</a></li>
                                        <li class="see-all"><a href="http://codyhouse.co/?p=748">All Caps &amp; Hats</a></li>
                                        <li><a href="http://codyhouse.co/?p=748">Beanies</a></li>
                                        <li><a href="http://codyhouse.co/?p=748">Caps</a></li>
                                        <li><a href="http://codyhouse.co/?p=748">Hats</a></li>
                                    </ul>
                                -->
                                <li><a href="http://codyhouse.co/?p=748">Peq. Eletro de Cozinha</a></li>
                                <li><a href="http://codyhouse.co/?p=748">Aquecimento e Climatização</a></li>
                                <li><a href="http://codyhouse.co/?p=748">Bricolage</a></li>

                            </ul>
                        </li>






                    </ul> <!-- .cd-secondary-dropdown -->
                </li> <!-- .has-children -->


            </ul> <!-- .cd-dropdown-content -->
        </nav> <!-- .cd-dropdown -->





    </div> <!-- .cd-dropdown-wrapper -->




               <div class="cd-dropdown-wrapper">
                <button type="button" data-toggle="dropdown" id="botao2" class="btn btn-default dropdown-toggle cd-dropdown-trigger">Supermercados</button>

                <nav class="cd-dropdown">

            <a href="#0" class="cd-close">Close</a>
            <ul class="cd-dropdown-content">

                <li class="has-children">
                    <a href="http://codyhouse.co/?p=748">Cona</a>

                    <ul class="cd-secondary-dropdown is-hidden">
                        <li class="go-back"><a href="#0">Menu</a></li>
                        <li class="see-all"><a href="http://codyhouse.co/?p=748">Todos os eletrodomésticos</a></li>
                        <li class="has-children">
                            <a href="http://codyhouse.co/?p=748">Eletrodomésticos</a>

                            <ul class="is-hidden">
                                <li class="go-back"><a href="#0">Eletrodomésticos</a></li>
                                <li class="see-all"><a href="http://codyhouse.co/?p=748">Todos os eletrodomésticos</a></li>
                                <!--<li class="has-children">-->
                                <li><a href="#0">Grandes Eletro de cozinha</a></li>
                             <!-- Funcionalidade para colocar dps outras subcategorias, não para já!
                                    <ul class="is-hidden">
                                        <li class="go-back"><a href="#0">Accessories</a></li>
                                        <li class="see-all"><a href="http://codyhouse.co/?p=748">All Benies</a></li>
                                        <li><a href="http://codyhouse.co/?p=748">Caps &amp; Hats</a></li>
                                        <li><a href="http://codyhouse.co/?p=748">Gifts</a></li>
                                        <li><a href="http://codyhouse.co/?p=748">Scarves &amp; Snoods</a></li>
                                    </ul>-->

                                <!--<li class="has-children">-->
                                <li><a href="#0">Eletrodoméstico de Limpeza</a></li>
                                <!-- Funcionalidade para colocar dps outras subcategorias, não para já!
                                    <ul class="is-hidden">
                                        <li class="go-back"><a href="#0">Accessories</a></li>
                                        <li class="see-all"><a href="http://codyhouse.co/?p=748">All Caps &amp; Hats</a></li>
                                        <li><a href="http://codyhouse.co/?p=748">Beanies</a></li>
                                        <li><a href="http://codyhouse.co/?p=748">Caps</a></li>
                                        <li><a href="http://codyhouse.co/?p=748">Hats</a></li>
                                    </ul>
                                -->
                                <li><a href="http://codyhouse.co/?p=748">Peq. Eletro de Cozinha</a></li>
                                <li><a href="http://codyhouse.co/?p=748">Aquecimento e Climatização</a></li>
                                <li><a href="http://codyhouse.co/?p=748">Bricolage</a></li>

                            </ul>
                        </li>






                    </ul> <!-- .cd-secondary-dropdown -->
                </li> <!-- .has-children -->


            </ul> <!-- .cd-dropdown-content -->
        </nav> <!-- .cd-dropdown -->





    </div> <!-- .cd-dropdown-wrapper --> 




         </ul>



                    <form class="navbar-form navbar-left">
                        <div class="form-group">
                            <input type="text" class="form-control" placeholder="Pesquisar Produto">
                        </div>
                        <button type="submit" class="btn btn-danger">
                            <i class="glyphicon glyphicon-search"></i>
                        </button>
                    </form>
                </div>
            </div>
        </div>


    </nav>

    </header>

我试过放置片段,但放置 cdns 链接不起作用。 如果您需要什么,请告诉我。

最佳答案

$('.cd-dropdown')toggleNav 方法中选择所有具有类 cd-dropdown 的元素,而不仅仅是你选择的元素点击。

所以您的 toggleNav 方法会在调用时切换所有下拉菜单。


解决方案:

您需要将需要处理下拉列表的引用传递给toggleNav 方法

$('.cd-dropdown-trigger, .cd-dropdown .cd-close').on('click', function(event){
    event.preventDefault();
    toggleNav($(this).closest('.cd-dropdown-wrapper'));
});

仅在 toggleNav 内处理与该引用相关的元素

function toggleNav(dropdown){
    var navIsVisible = ( !$('.cd-dropdown', dropdown).hasClass('dropdown-is-active') ) ? true : false;
    $('.cd-dropdown', dropdown).toggleClass('dropdown-is-active', navIsVisible);
    $('.cd-dropdown-trigger', dropdown).toggleClass('dropdown-is-active', navIsVisible);
    if( !navIsVisible ) {
        $('.cd-dropdown', dropdown).one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend',function(){
            $('.has-children ul', dropdown).addClass('is-hidden');
            $('.move-out', dropdown).removeClass('move-out');
            $('.is-active', dropdown).removeClass('is-active');
        }); 
    }
}

PS: $('selector', context) is same as context.find('selector'). You can use the second if it makes code more clear.

关于javascript - 为什么我的所有按钮的下拉内容都相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49924402/

相关文章:

javascript - JSON 文件中的对象未填充下拉菜单

javascript - HTML5 拖放功能 - 删除掉落的项目

jquery - 选择最后一个直系子项

javascript - 是否可以使用 React Native 应用程序操作 MySQL 数据?

javascript - 打印 IIFE 的函数名私有(private)方法

javascript - Angular 4 Linkedin 关注按钮不显示

javascript - jquery-select2 将值作为 CSV 字符串发送到服务器

jQuery 添加结束标记,然后在使用 .before() 时重新打开

html - 如何在小屏幕上正确显示宽表?

javascript - 交换(拖放)在特定的 div 中不起作用