LoginSignup
0
1

More than 3 years have passed since last update.

クリックイベントを取り消す処理について

Posted at

クリックしたらドロップダウンでメニューが出てくるのをjQueryで実装していたのですが、それを消すためのイベントについての話です。

右の▼または画像をクリックするとドロップダウンメニューが出てきて、その後どこかをクリックすると消える、という物です。

blurではできなかった。

ドロップダウンメニューが消えずにずっと残っていた。邪魔。

navbar.html.erb
          <li class="nav-item dropdown" id="nav-bar__dropdown">
            <%= link_to '#',class: "ml-2 tip-accoount",id:'nav-bar__account' do %>
              <%= image_tag 'sample-account.png',class: "navbar__profile-icon" %>
              <span class="caret">
                <%= icon('fas','caret-down') %>
              </span>
            <% end %>
            <div class="dropdown-menu dropdown-menu-right">
              <%= link_to '管理ページ','#' ,class:"dropdown-item ajax-link" %>
              <%= link_to 'ログアウト','#' ,class:"dropdown-item ajax-link" %>
            </div>
          </li>
navbar.js
  $("#nav-bar__dropdown").click(function(){
    $("#nav-bar__dropdown").children(".dropdown-menu").toggleClass("show");
  });
  $("#nav-bar__dropdown").blur(function(){
    $("#nav-bar__dropdown").children(".dropdown-menu").removeClass("show");
  });

結論:blurではなくfocusoutを使う

blurではその要素自体にしか適用されないので、子要素に適用するにはfocusoutを使わないといけない、とのことです。

navbar.js
  $("#nav-bar__dropdown").click(function(){
    $("#nav-bar__dropdown").children(".dropdown-menu").toggleClass("show");
  });
  $("#nav-bar__dropdown").focusout(function(){
    $("#nav-bar__dropdown").children(".dropdown-menu").removeClass("show");
  });

参考にした記事

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1