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

时间:2018-04-19 15:06:48

标签: 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链接。 如果您需要什么,请告诉我。

2 个答案:

答案 0 :(得分:2)

$('.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)context.find('selector')相同。   如果它使代码更清晰,你可以使用第二个。

答案 1 :(得分:0)

您的代码不知道如何区分按钮。 要解决此问题,请为每个按钮添加“id”。请参阅随附的“代码段”,其中描述了具有不同“id”的2个按钮:s。

如果div中有菜单链接文本,则相同的解决方案有效。 然后,您需要为处理菜单链接的每个div添加“id”。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>

<style>

#button-1 {
height: 50px;
width: 100px;
background-color: pink;
}

#button-2 {
height: 50px;
width: 100px;
background-color: lightblue;
}

</style>

</head>
<body>

<button id="button-1" type="button" name="button">button-1</button>
<button id="button-2" type="button" name="button">button-2</button>

</body>
</html>