悬停下拉菜单即使在鼠标移出后也保持活动状态

Hover dropdown stays active even after mouseout

本文关键字:活动状态 移出 鼠标 下拉菜单 悬停      更新时间:2023-09-26

我有这个脚本,当你有一个小屏幕时,你必须点击,点击手机,显示下拉菜单。现在它可以在这个屏幕上工作,但在更大的屏幕上,我不希望人们必须点击大便,我希望它处于悬停状态。

这是我的代码

$( document ).ready(function() {
    var open = false;
      if ($(window).width() > 767) {
          $(".dropdown").hover(
             function(){
                 $('ul.nav li.dropdown:hover > ul.dropdown-menu').css('display','block');
                 console.log('display block de nav HOVER');
             });
      }
     else {
         console.log('kleiner');
         $(".dropdown").click(
             function(){
                 if (open){
                     $('ul.nav li.dropdown:hover > ul.dropdown-menu').css('display','none');
                     console.log('display none de nav');
                 } else {
                 $('ul.nav li.dropdown:hover > ul.dropdown-menu').css('display','block');
                     console.log('display block de nav');
                 }
                 open = !open;
             });
        }
}); 

html

<nav id="navbar" class="navbar navbar-default">
                <div class="container-fluid">
                    <div class="navbar-header">
                        <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#typo-navbar-collapse-1" aria-expanded="false">
                            <span class="sr-only">Toggle navigation</span>
                            <span class="icon-bar"></span>
                            <span class="icon-bar"></span>
                            <span class="icon-bar"></span>
                        </button>
                        @if(Sentinel::guest())
                            <a class="navbar-brand" href="{{ route('auth.login') }}">Typografics Academy</a>
                        @elseif(Sentinel::inRole('user'))
                            <a class="navbar-brand" href="{{ route('user.dashboard') }}">Typografics Academy</a>
                        @elseif(Sentinel::inRole('admin') || Sentinel::inRole('super'))
                            <a class="navbar-brand" href="{{ route('admin.dashboard') }}">Typografics Academy</a>
                        @endif
                    </div>
                    <div class="collapse navbar-collapse" id="typo-navbar-collapse-1">
                        <ul class="nav navbar-nav">
                            @if(!Sentinel::guest())
                                @if(Sentinel::inRole('user'))
                                    <li {{ Request::is('/results*') ? 'class=active' : ''}}><a href="{{ route('user.results') }}">Results</a></li>
                                @elseif(Sentinel::inRole('admin') || Sentinel::inRole('super'))
                                    <li {{ Request::is('admin/users*') ? 'class=active' : ''}}><a href="{{ route('users.overview') }}">Gebruikers</a></li>
                                    <li {{ Request::is('admin/tests*') ? 'class=active' : ''}}><a href="{{ route('tests.overview') }}" >Tests</a></li>
                                    <li {{ Request::is('admin/profiles*') ? 'class=active' : ''}}><a href="{{ route('profiles.overview') }}">Profielen</a></li>
                                    <li {{ Request::is('admin/results*') ? 'class=active' : ''}}><a href="{{ route('results.overview') }}">Results</a></li>
                                    @if(Sentinel::inRole('super'))
                                        <li {{ Request::is('admin/questions*') ? 'class=active' : ''}}><a href="{{ route('questions.overview') }}">Vragen</a></li>
                                        <li {{ Request::is('admin/categories*') ? 'class=active' : ''}}><a href="{{ route('categories.overview') }}">{{trans('master.categories')}}</a></li>
                                        <li {{ Request::is('admin/companies*') ? 'class=active' : ''}}><a href="{{ route('companies.overview') }}">Bedrijven</a></li>
                                    @endif
                                    <li class="dropdown">
                                        <a href="#" role="button" aria-haspopup="true" aria-expanded="false"> <span class="glyphicon glyphicon-plus"></span> Nieuw <span class="caret"></span></a>
                                        <ul class="dropdown-menu">
                                            <li {{ Request::is('admin/users/new') ? 'class=active' : ''}}><a href="{{ route('users.new') }}">{{trans('master.user')}}</a></li>
                                            <li {{ Request::is('admin/tests/new') ? 'class=active' : ''}}><a href="{{ route('tests.new.1') }}">{{trans('master.test')}}</a></li>
                                            <li {{ Request::is('admin/profiles/new') ? 'class=active' : ''}}><a href="{{ route('profiles.new') }}">{{trans('master.profile')}}</a></li>
                                            @if(Sentinel::inRole('super'))
                                                <li {{ Request::is('admin/questions/new') ? 'class=active' : ''}}><a href="{{ route('questions.new') }}">{{trans('master.question')}}</a></li>
                                                <li {{ Request::is('admin/categories/new') ? 'class=active' : ''}}><a href="{{ route('categories.new') }}">{{trans('master.category')}}</a></li>
                                                <li {{ Request::is('admin/subcategories/new') ? 'class=active' : ''}}><a href="{{ route('subcategories.new.without') }}">{{trans('master.subcategory')}}</a></li>
                                                <li {{ Request::is('admin/companies/new') ? 'class=active' : ''}}><a href="{{ route('companies.new') }}">{{trans('master.company')}}</a></li>
                                            @endif
                                        </ul>

                                    </li>

                                @endif
                             @endif
                        </ul>
                        @if(!Sentinel::guest())
                            <ul class="nav navbar-nav navbar-right">
                                <li><a class="userprofiel" href="#">{{ucwords(Sentinel::check()->first_name)}}</a></li>
                                <li><a class="logout" href="{{ route('auth.logout') }}">Logout</a></li>
                            </ul>
                        @else
                            <ul class="nav navbar-nav navbar-right">
                                <li {{ Request::is('auth/login') ? 'class=active' : ''}}><a href="{{ route('auth.login') }}">Login</a></li>
                            </ul>
                        @endif
                    </div>
                </div>
            </nav>

试试这个:

$( document ).ready(function() {
    var open = false;
      if ($(window).width() > 767) {
          $(".dropdown").hover(
             function(){
                 $(this).find('.dropdown-menu').css('display','block');
                 console.log('display block de nav HOVER');
             }, function() {
               $(this).find('.dropdown-menu').css('display','none');
             });
      }
     else {
         console.log('kleiner');
         $(".dropdown").click(
             function(){
                 if (open){
                     $('ul.nav li.dropdown:hover > ul.dropdown-menu').css('display','none');
                     console.log('display none de nav');
                 } else {
                 $('ul.nav li.dropdown:hover > ul.dropdown-menu').css('display','block');
                     console.log('display block de nav');
                 }
                 open = !open;
             });
        }
});

输出:http://output.jsbin.com/wekepi

代码:http://jsbin.com/wekepi/edit?js

jQuery方法:.hover( handlerIn, handlerOut )

参考编号:https://api.jquery.com/hover/

这是因为当您将鼠标悬停在菜单上时,它会告诉菜单显示为块,而不会执行任何其他操作。

添加一个.block类,然后在悬停时切换class,然后根据需要添加和删除。

.block { display:block; }

      $(".dropdown").hover(
         function(){
             $('ul.nav li.dropdown:hover > ul.dropdown-menu').toggleClass('block');
             console.log('display block de nav HOVER');
         });

根据@Surender Lohia的回答,我找到了这个问题的正确解决方案。

$(document).ready(function () {
    var open = false;
    var displayB = function () {
        $('.dropdown-menu').css('display', 'block');
        console.log('display BLOCK de nav HOVER');
    };
    var displayN = function () {
        $('.dropdown-menu').css('display', 'none');
        console.log('display NONE de nav HOVER');
    };
    var resizeEvent = function () {
        if ($(window).width() > 767) {
            $(".dropdown").hover(displayB, displayN);
        } else {
            console.log('kleiner');
            $('.dropdown').off();
            $(".dropdown").click(function () {
                if (open) {
                    displayN();
                } else {
                    displayB();
                }
                open = !open;
            });
        }
    };
    resizeEvent();
    $(window).resize(resizeEvent);
});