[JQUERY] JQuery와에 닫 외부 메뉴를 클릭
JQUERYJQuery와에 닫 외부 메뉴를 클릭
해결법
-
1.이 질문은 사용하는 방법을 살펴보십시오 :
이 질문은 사용하는 방법을 살펴보십시오 :
어떻게 요소 외부의 클릭을 감지합니까?
$('html').click(function() { //Hide the menus if visible }); $('#menucontainer').click(function(event){ event.stopPropagation(); });
-
2.대답은 권리이지만, 클릭이 페이지에 발생할 때마다 트리거 될 청취자를 추가합니다. 이를 방지하려면 한 시간 동안 청취자를 추가 할 수 있습니다 :
대답은 권리이지만, 클릭이 페이지에 발생할 때마다 트리거 될 청취자를 추가합니다. 이를 방지하려면 한 시간 동안 청취자를 추가 할 수 있습니다 :
$('a#menu-link').on('click', function(e) { e.preventDefault(); e.stopPropagation(); $('#menu').toggleClass('open'); $(document).one('click', function closeMenu (e){ if($('#menu').has(e.target).length === 0){ $('#menu').removeClass('open'); } else { $(document).one('click', closeMenu); } }); });
편집 : 초기 버튼 ()을 인 stopPropagation을 피하려면 당신은이를 사용할 수 있습니다
var $menu = $('#menu'); $('a#menu-link').on('click', function(e) { e.preventDefault(); if (!$menu.hasClass('active')) { $menu.addClass('active'); $(document).one('click', function closeTooltip(e) { if ($menu.has(e.target).length === 0 && $('a#menu-link').has(e.target).length === 0) { $menu.removeClass('active'); } else if ($menu.hasClass('active')) { $(document).one('click', closeTooltip); } }); } else { $menu.removeClass('active'); } });
-
3.그들은 HTML 요소에 가까운 핸들러를 첨부 할 수있는 다른 메뉴를 포함하여 다른 이벤트 핸들러를 방해 할 수 있기 때문에 인 stopPropagation 옵션은 나쁘다.
그들은 HTML 요소에 가까운 핸들러를 첨부 할 수있는 다른 메뉴를 포함하여 다른 이벤트 핸들러를 방해 할 수 있기 때문에 인 stopPropagation 옵션은 나쁘다.
여기 user2989143의 답변에 따라 간단한 솔루션입니다 :
$('html').click(function(event) { if ($(event.target).closest('#menu-container, #menu-activator').length === 0) { $('#menu-container').hide(); } });
-
4.플러그인을 사용하여 당신이 경우에 확인의 경우, 나는 여기에 플러그인 벤 독일어의 clickoutside을 제안한다 :
플러그인을 사용하여 당신이 경우에 확인의 경우, 나는 여기에 플러그인 벤 독일어의 clickoutside을 제안한다 :
그 사용법이 간단과 같다 :
$('#menu').bind('clickoutside', function (event) { $(this).hide(); });
도움이 되었기를 바랍니다.
-
5.당신이 조사 할 수 2 옵션 :
당신이 조사 할 수 2 옵션 :
-
6.나는 Grsmto의 솔루션의 변종을 발견 데니스 '솔루션은 내 문제를 해결.
나는 Grsmto의 솔루션의 변종을 발견 데니스 '솔루션은 내 문제를 해결.
$(".MainNavContainer").click(function (event) { //event.preventDefault(); // Might cause problems depending on implementation event.stopPropagation(); $(document).one('click', function (e) { if(!$(e.target).is('.MainNavContainer')) { // code to hide menus } }); });
-
7.나는 같은 페이지에서 같은 동작을 여러 요소와이 솔루션을 사용 :
나는 같은 페이지에서 같은 동작을 여러 요소와이 솔루션을 사용 :
$("html").click(function(event){ var otarget = $(event.target); if (!otarget.parents('#id_of element').length && otarget.attr('id')!="id_of element" && !otarget.parents('#id_of_activator').length) { $('#id_of element').hide(); } });
인 stopPropagation ()는 나쁜 생각, 버튼 및 링크를 포함하여 많은 일들이 휴식 표준 동작입니다.
-
8.나는 최근에 같은 문제에 직면했다. 나는 다음과 같은 코드를 작성 :
나는 최근에 같은 문제에 직면했다. 나는 다음과 같은 코드를 작성 :
$('html').click(function(e) { var a = e.target; if ($(a).parents('.menu_container').length === 0) { $('.ofSubLevelLinks').removeClass('active'); //hide menu item $('.menu_container li > img').hide(); //hide dropdown image, if any } });
그것은 완벽하게 나를 위해 일했다.
-
9.무엇에 대해?
무엇에 대해?
$(this).mouseleave(function(){ var thisUI = $(this); $('html').click(function(){ thisUI.hide(); $('html').unbind('click'); }); });
-
10.내가 사용 mousedown 이벤트 대신에 클릭 이벤트가 더 유용하게 찾을 수 있습니다. 클릭 이벤트는 클릭 이벤트와 페이지의 다른 요소에있는 경우 사용자가 클릭을 작동하지 않습니다. jQuery의 하나 () 메소드와 조합은 다음과 같습니다 :
내가 사용 mousedown 이벤트 대신에 클릭 이벤트가 더 유용하게 찾을 수 있습니다. 클릭 이벤트는 클릭 이벤트와 페이지의 다른 요소에있는 경우 사용자가 클릭을 작동하지 않습니다. jQuery의 하나 () 메소드와 조합은 다음과 같습니다 :
$("ul.opMenu li").click(function(event){ //event.stopPropagation(); not required any more $('#MainOptSubMenu').show(); // add one mousedown event to html $('html').one('mousedown', function(){ $('#MainOptSubMenu').hide(); }); }); // mousedown must not be triggered inside menu $("ul.opMenu li").bind('mousedown', function(evt){ evt.stopPropagation(); });
-
11.심지어 내가 같은 상황을 가로 질러 와서 내 멘토 중 하나는 자신을 통해이 아이디어를 넣어.
심지어 내가 같은 상황을 가로 질러 와서 내 멘토 중 하나는 자신을 통해이 아이디어를 넣어.
단계 : 1을 우리가 드롭 다운 메뉴를 표시해야하는 버튼을 클릭 할 때. 아래 그림과 같이 다음 클래스 이름 아래의 "more_wrap_background"현재 활성 페이지에 추가
$('.ui-page-active').append("<div class='more_wrap_background' id='more-wrap-bg'> </div>");
스텝 2는 div 태그 등의 클릭을 추가
$(document).on('click', '#more-wrap-bg', hideDropDown);
hideDropDown이 기능을 여기서 다운 메뉴 숨기기 드롭으로 호출 할 수
스텝 3 드롭 다운 메뉴를 숨기고 중요한 단계는 클래스가 이전처럼 추가하면 있다는 것을 제거입니다
$('#more-wrap-bg').remove();
나는 위의 코드에서 해당 ID를 사용하여 제거하고
.more_wrap_background { top: 0; padding: 0; margin: 0; background: rgba(0, 0, 0, 0.1); position: fixed; display: block; width: 100% !important; z-index: 999;//should be one less than the drop down menu's z-index height: 100% !important; }
-
12.
$("html").click( onOutsideClick ); onOutsideClick = function( e ) { var t = $( e.target ); if ( !( t.is("#mymenu" ) || //Where #mymenu - is a div container of your menu t.parents( "#mymenu" ).length > 0 ) ) { //TODO: hide your menu } };
그리고 더 나은 메뉴가 표시되는 경우에만 리스너를 설정하고 항상 메뉴가 숨겨져 된 후 리스너를 제거합니다.
-
13.그것은 복잡 할 필요가 없습니다.
그것은 복잡 할 필요가 없습니다.
$(document).on('click', function() { $("#menu:not(:hover)").hide(); });
-
14.난 당신이 뭔가를해야한다고 생각 : http://jsfiddle.net/BeenYoung/BXaqW/3/
난 당신이 뭔가를해야한다고 생각 : http://jsfiddle.net/BeenYoung/BXaqW/3/
$(document).ready(function() { $("ul.opMenu li").each(function(){ $(this).click(function(){ if($(this).hasClass('opened')==false){ $('.opMenu').find('.opened').removeClass('opened').find('ul').slideUp(); $(this).addClass('opened'); $(this).find("ul").slideDown(); }else{ $(this).removeClass('opened'); $(this).find("ul").slideUp(); } }); }); });
나는 당신을 위해 유용 희망!
-
15.'눈에 보이는'선택기를 사용합니다. .menuitem은을 숨기기 요소 (들)입니다 ...
'눈에 보이는'선택기를 사용합니다. .menuitem은을 숨기기 요소 (들)입니다 ...
$('body').click(function(){ $('.menuitem:visible').hide('fast'); });
또는 당신은 이미 VAR의 .menuitem 요소 (들)이있는 경우 ...
var menitems = $('.menuitem'); $('body').click(function(){ menuitems.filter(':visible').hide('fast'); });
from https://stackoverflow.com/questions/2868582/click-outside-menu-to-close-in-jquery by cc-by-sa and MIT license
'JQUERY' 카테고리의 다른 글
[JQUERY] 어떻게 자바 스크립트를 사용하여 요소의 XPath는 위치를 계산하는? (0) | 2020.10.24 |
---|---|
[JQUERY] 제출에 방지 폼 리디렉션 또는 새로 고침? (0) | 2020.10.24 |
[JQUERY] 어떻게 크롬 확장에 jQuery를 사용 하는가? (0) | 2020.10.23 |
[JQUERY] 웹팩와 실제 창 개체에 jQuery를 노출 (0) | 2020.10.23 |
[JQUERY] 설정 사용자 지정 HTML5 필요한 필드 검증 메시지 (0) | 2020.10.23 |