[jquery] 요소 외부의 클릭 이벤트에서 요소를 숨기려면 어떻게해야합니까?

이것이 페이지의 아무 곳이나 클릭했을 때 보이는 요소를 숨기는 올바른 방법인지 알고 싶습니다.

$(document).click(function (event) {
    $('#myDIV:visible').hide();
});

요소 (div, span 등)는 요소 경계 내에서 클릭 이벤트가 발생할 때 사라지지 않아야합니다.



답변

내가 이해한다면 div가 아닌 아무 곳이나 클릭하면 div를 숨기고 싶고 div를 클릭하면 닫히지 않아야합니다. 다음 코드로 할 수 있습니다.

$(document).click(function() {
    alert("me");
});
$(".myDiv").click(function(e) {
    e.stopPropagation(); // This is the preferred method.
    return false;        // This should not be used unless you do not want
                         // any click events registering inside the div
});

이렇게하면 클릭이 전체 페이지에 바인딩되지만 해당 div를 클릭하면 클릭 이벤트가 취소됩니다.


답변

이 시도

 $('.myDiv').click(function(e) { //button click class name is myDiv
  e.stopPropagation();
 })

 $(function(){
  $(document).click(function(){
  $('.myDiv').hide(); //hide the button

  });
});

내가 사용하는 대신 ID의 클래스 이름을 asp.net 당신이 가지고 있기 때문에 ID로 여분의 물건 그물에 첨부합니다 대한 걱정에,

편집-
다른 조각을 추가 했으므로 다음과 같이 작동합니다.

 $('.myDiv').click(function() { //button click class name is myDiv
  e.stopPropagation();
 })

 $(function(){
  $('.openDiv').click(function() {
  $('.myDiv').show();

  });
  $(document).click(function(){
  $('.myDiv').hide(); //hide the button

  });
});


답변

jQuery 1.7부터 이벤트를 처리하는 새로운 방법이 있습니다. 나는 이것을 “새로운”방식으로 수행하는 방법을 보여주기 위해 여기에 대답하겠다고 생각했다. 아직 읽지 않았다면 “on”메소드에 대한 jQuery 문서를 읽는 것이 좋습니다 .

var handler = function(event){
  // if the target is a descendent of container do nothing
  if($(event.target).is(".container, .container *")) return;

  // remove event handler from document
  $(document).off("click", handler);

  // dostuff
}

$(document).on("click", handler);

여기서 우리는 jQuery의 선택기와 이벤트 버블 링을 남용하고 있습니다. 나중에 이벤트 핸들러를 정리했는지 확인합니다. 이 동작은 $('.container').one( 참조 : docs )로 자동화 할 수 있지만 여기서 적용 할 수없는 핸들러 내에서 조건을 수행해야하기 때문입니다.


답변

다음 코드 예제는 저에게 가장 잘 작동하는 것 같습니다. div 또는 하위 항목에 대한 해당 이벤트의 모든 처리를 중지하는 ‘return false’를 사용할 수 있습니다. 팝업 div (예 : 팝업 로그인 양식)를 제어하려면 event.stopPropogation ()을 사용해야합니다.

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>
    <a id="link" href="#">show box</a>
    <div id="box" style="background: #eee; display: none">
        <p>a paragraph of text</p>
        <input type="file"  />
    </div>

    <script src="jquery.js" type="text/javascript"></script>

    <script type="text/javascript">
        var box = $('#box');
        var link = $('#link');

        link.click(function() {
            box.show(); return false;
        });

        $(document).click(function() {
            box.hide();
        });

        box.click(function(e) {
            e.stopPropagation();
        });

    </script>
</body>
</html>


답변

고마워, 토마스. 저는 JS를 처음 접했고 내 문제에 대한 해결책을 찾고있었습니다. 당신의 도움이되었습니다.

jquery를 사용하여 아래로 미끄러지는 로그인 상자를 만들었습니다. 최상의 사용자 경험을 위해 사용자가 상자가 아닌 다른 곳을 클릭 할 때 상자가 사라지도록 만들고 싶었습니다. 이 문제를 해결하는 데 약 4 시간을 사용하는 것이 조금 부끄럽습니다. 하지만 저는 JS가 처음입니다.

아마도 내 코드가 누군가를 도울 수 있습니다.

<body>
<button class="login">Logg inn</button>
<script type="text/javascript">

    $("button.login").click(function () {
        if ($("div#box:first").is(":hidden")) {
                $("div#box").slideDown("slow");}
            else {
                $("div#box").slideUp("slow");
                }
    });
    </script>
<div id="box">Lots of login content</div>

<script type="text/javascript">
    var box = $('#box');
    var login = $('.login');

    login.click(function() {
        box.show(); return false;
    });

    $(document).click(function() {
        box.hide();
    });

    box.click(function(e) {
        e.stopPropagation();
    });

</script>

</body>


답변

또한 할 수있는 작업은 다음과 같습니다.

$(document).click(function (e)
{

  var container = $("div");

   if (!container.is(e.target) && container.has(e.target).length === 0)
  {
 container.fadeOut('slow');

   }

});

대상이 div가 아닌 경우 길이가 0인지 확인하여 div를 숨 깁니다.


답변

나는 아래를했다. 다른 사람도 혜택을 볼 수 있도록 공유를 생각했습니다.

$("div#newButtonDiv").click(function(){
    $(this).find("ul.sub-menu").css({"display":"block"});

    $(this).click(function(event){
        event.stopPropagation();
        $("html").click(function(){
            $(this).find("ul.sub-menu").css({"display":"none"});
        }
    });
});

누군가를 도울 수 있는지 알려주세요.