Подтвердить что ты не робот

Событие jQuery click off element

У меня есть плавающий div, который отображается, и я хочу, чтобы он был скрыт, когда пользователь нажимает на div. Это будет похоже на обратный вызов функции .hover() при отклонении от элемента. Только я хочу сделать это для клика.

Я попробовал просто установить событие click для тела, которое скроет div, но это дало неожиданные результаты.

У кого-нибудь есть идеи, как я мог бы легко это сделать?

4b9b3361

Ответ 1

Другим, возможно, более простым вариантом будет добавление прозрачного div между плавающим DIV и остальной частью страницы.

Простое событие click на прозрачном DIV может обрабатывать скрытие, и это позволит избежать проблем, с которыми вы сталкиваетесь с событием click.

Ответ 2

Если вы хотите очистить div, когда вы нажимаете на другое место на странице, вы можете сделать что-то вроде:

$('body').click(function(event) {
    if (!$(event.target).closest('#myDiv').length) {
        $('#myDiv').hide();
    };
});

Ответ 3

Если вы используете Jquery, вы можете использовать селектор типа:

$("*:not(#myDiv)").live("click", function(){
    $("#myDiv").hide();
});

Ответ 4

Вы действительно ищете событие blur?

Ответ 5

Лучший способ сделать это: -

    
$(document).bind('click', function(e) {  

 var $clicked = $(e.target);

    if (!$clicked.parents().hasClass("divtohide")) {
        $(".divtohide").hide();
    }

});

Ответ 6

Это сработало для меня,

var mouseOver = false;
$("#divToHide").mouseover(function(){mouseOver=true;});
$("#divToHide").mouseout(function(){mouseOver=false;});
$("body").click(function(){
      if(mouseOver == false) {
           $("#divToHide").hide();
      }
});

Ответ 7

Это функция для обработки события клика, я передаю ему селектор всплывающего окна и элемент jquery. Вероятно, лучше служил плагин jquery, но это достаточно просто.

clickOut = function(selector, element) {
 var hide = function(event) {
  // Hide search options if clicked out
  if (!$(event.originalEvent.target).parents(selector).size())
   $(element).hide();
  else
   $(document).one("click",hide);
 };

 $(document).one("click", hide);
};

Итак, если у вас есть popup-элемент типа <div class='popup'>test</div>, вы можете использовать мою функцию, например clickOut("div.popup", $("div.popup"));

Ответ 8

Например, вы нажимаете элемент ссылки для отображения меню div, вы просто связываете функцию размытия, чтобы связать элемент, чтобы скрыть меню div

$('a#displaymenu').click(function(){
   $("#divName").toggle();
}).blur(function() {$("#divName").hide()})

Ответ 9

     $('body').click(function (event) {        
if ($("#divID").is(':visible')) {
            $('#divID').slideUp();
        }
});

Это можно использовать, чтобы проверить, является ли div видимым, если он виден, затем он сдвигает объект вверх.

Ответ 10

Здесь полнофункциональный подход, основанный на событиях

  • Пользовательские события обрабатывают "вызов" и "отклонение" слоя, чтобы не наступать на носки других событий, основанных на кликах.
  • document.body прислушивается к событию увольнения только тогда, когда рассматриваемый слой действительно отображается

Код Zee:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<title>test</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script>
<script type="text/javascript">

$(function()
{
  var $layer = $('#layer');
  var $body  = $('html');

  $layer
    .bind( 'summon', function( e )
    {
      $layer.show();
      $body.bind( 'click', dismissLayer );
    } )
    .bind( 'dismiss', function( e )
    {
      $layer.hide();
      $body.unbind( 'click', dismissLayer );
    } )
    .click( function( e )
    {
      e.stopPropagation();
    })
    .trigger( 'dismiss' )
  ;

  function dismissLayer( e )
  {
    $layer.trigger( 'dismiss' );
  }

  // This is optional - this just triggers the div to 'visible'
  $('#control').click( function( e )
  {
    var $layer = $('#layer:hidden');
    if ( $layer.length )
    {
      $layer.trigger( 'summon' );
      e.stopPropagation();
    }
  } );
});

</script>

<style type="text/css">
#layer {
  position: absolute;
  left: 100px;
  top: 20px;
  background-color: red;
  padding: 10px;
  color: white;
}
#control {
  cursor: pointer;
}
</style>

</head>
<body>

<div id="layer">test</div>
<span id="control">Show div</span>

</body>
</html>

Это много кода, который я знаю, но здесь просто для того, чтобы показать другой подход.

Ответ 12

Использование обработчика событий в документе хорошо работает для меня:

function popUp( element )
{
    element.onmousedown = function (event) { event.stopPropagation(); };
    document.onmousedown = function () { popDown( element ); };

    document.body.appendChild( element );
}

function popDown( element )
{
    document.body.removeChild( element );

    document.onmousedown = null;
}

Ответ 13

Я нашел решение на форуме... но я не могу найти его, чтобы отблагодарить оригинального автора. Вот версия (измененная, которая живет в моем коде).

 $(document).bind('mousedown.yourstuff', function(e) {
            var clicked=$(e.target); // get the element clicked                 
            if( clicked.is('#yourstuff')
                 || clicked.parents().is('#yourstuff')) {
                // click safe!
            } else {
                // outside click
                closeIt();
            }
        });

 function closeIt() {
        $(document).unbind('mousedown.emailSignin');
        //...
}

У меня также есть привязки клавиш ESC и "закрывающий" html-якорь, не изображенный выше.

Ответ 14

Если вы не хотите скрывать элемент, который вы покажете, щелкнув сам:

var div_active, the_div;

the_div = $("#the-div");
div_active = false;

$("#show-the-div-button").click(function() {
  if (div_active) {
    the_div.fadeOut(function(){
      div_active = false;
    });
  } else {
    the_div.fadeIn(function(){
      div_active = true;
    });
  }
});

$("body").click(function() {
  if div_active {
    the_div.fadeOut();
    div_active = false;
  }
});

the_div.click(function() {
  return false;
});

Ответ 15

Вам нужно будет отслеживать событие mouseDown для всей страницы, но вам нужно будет обратить внимание, когда пользователь нажимает внутри вашего плавающего div.

Я бы предложил добавить событие зависания в ваш floated div, поэтому, когда пользователь зависает над ним, mouseDown игнорируется, но когда он не наводится на mouseDown, он закрывает его