单击外部时隐藏div

时间:2022-08-26 20:23:30

This question has been asked multiple times, however none of the answers seem to work for me.

这个问题已被多次询问,但是没有一个答案似乎对我有用。

The css of the div is as follows:

div的css如下:

#info{
  display: none;
  position: fixed;
  z-index: 500;
  height: 50%;
  width: 60%;
  overflow: auto;
  background: rgba(187, 187, 187, .8);
}

I tried to use the following code:

我试着使用以下代码:

$("#info").click(function(e){
  e.stopPropagation();
});

$(document).click(function(){
  $("#info").hide();
});

as well as this code:

以及这段代码:

$(document).mouseup(function (e){
    var container = $("#info");

    if (container.has(e.target).length === 0) {
        container.hide();
    }
});

Yet whenever i click on the div it also disappears, no clue why but it does.
Any thing else that might work?

然而,每当我点击div它也会消失,不知道为什么,但它确实。还有什么可能有用吗?

6 个解决方案

#1


31  

As your target has id=info, so you can try:

由于您的目标有id = info,因此您可以尝试:

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

  // check that your clicked
  // element has no id=info

  if( e.target.id != 'info') {
    $("#info").hide();
  }
});

You can also try:

你也可以尝试:

$(document).click(function() {

  if( this.id != 'info') {
    $("#info").hide();
  }

});

According to comment

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

    // check that your clicked
    // element has no id=info
    // and is not child of info
    if (e.target.id != 'info' && !$('#info').find(e.target).length) {
        $("#info").hide();
    }
});

#2


4  

Attach an onclick event handler to the document object:

将onclick事件处理程序附加到文档对象:

$(document).click(function(e) {   
    if(e.target.id != 'info') {
        $("#info").hide();   
    } 
});

Demo: http://jsfiddle.net/aUjRG/

演示:http://jsfiddle.net/aUjRG/

Here is a solution in pure JavaScript to help you better understand what it happening:

以下是纯JavaScript中的解决方案,可帮助您更好地了解其发生的情况:

function hideInfo(){
    if(window.event.srcElement.id != 'info'){
        document.getElementById('info').style.display = 'none';
    }
}

document.onclick = hideInfo;

Demo: http://jsfiddle.net/mmzc8/

演示:http://jsfiddle.net/mmzc8/

Both solutions will check if the location that the user clicked was on the element with an ID of info. Assuming that the user did not click on the info element, then hide the info element.

两种解决方案都将检查用户单击的位置是否在ID为info的元素上。假设用户没有单击info元素,则隐藏info元素。

#3


3  

To ensure you have a solution that works on iPads too, then you need to use the following function trigger instead:

为了确保您的解决方案也适用于iPad,您需要使用以下功能触发器:

$(document).on("mousedown touchstart",function(e){
  var $info = $('#info');
  if (!$info.is(e.target) && $info.has(e.target).length === 0) {
    $info.hide();
  }
});

Similarly, if you are looking to cover off mouseup, add 'touchend':

同样,如果您想要覆盖鼠标,请添加'touchend':

$(document).on("mouseup touchend",function(e){
  ...
});

#4


3  

Try this code, this is the best for me.

试试这个代码,这对我来说是最好的。

jQuery('.button_show_container').click(function(e) {
    jQuery('.container').slideToggle('fast'); 
    e.stopPropagation();
});

jQuery(document).click(function() {
        jQuery('.container').slideUp('fast');
});

#5


0  

You can add a class only for check on mouse click that specific div or any within that div element clicked or not.

您可以添加一个类,仅用于检查鼠标单击特定div或该div元素中是否有任何单击。

$(document).click(function(e){            
    if ( !$(e.target).hasClass("[class name for check]") &&
         $("[element class or id]").css("display")=="block" ) {
            //...code if clicked out side div
    }
});

#6


-1  

Try the below solution. It's even working recursive:

尝试以下解决方案。它甚至可以递归工作:

$(document).mouseup(function(e) 
{
    var container = $("YOUR CONTAINER SELECTOR");

    // if the target of the click isn't the container nor a descendant of the container
    if (!container.is(e.target) && container.has(e.target).length === 0) 
    {
        container.hide();
    }
});

Reference - https://*.com/a/7385673/3910232

参考 - https://*.com/a/7385673/3910232

#1


31  

As your target has id=info, so you can try:

由于您的目标有id = info,因此您可以尝试:

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

  // check that your clicked
  // element has no id=info

  if( e.target.id != 'info') {
    $("#info").hide();
  }
});

You can also try:

你也可以尝试:

$(document).click(function() {

  if( this.id != 'info') {
    $("#info").hide();
  }

});

According to comment

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

    // check that your clicked
    // element has no id=info
    // and is not child of info
    if (e.target.id != 'info' && !$('#info').find(e.target).length) {
        $("#info").hide();
    }
});

#2


4  

Attach an onclick event handler to the document object:

将onclick事件处理程序附加到文档对象:

$(document).click(function(e) {   
    if(e.target.id != 'info') {
        $("#info").hide();   
    } 
});

Demo: http://jsfiddle.net/aUjRG/

演示:http://jsfiddle.net/aUjRG/

Here is a solution in pure JavaScript to help you better understand what it happening:

以下是纯JavaScript中的解决方案,可帮助您更好地了解其发生的情况:

function hideInfo(){
    if(window.event.srcElement.id != 'info'){
        document.getElementById('info').style.display = 'none';
    }
}

document.onclick = hideInfo;

Demo: http://jsfiddle.net/mmzc8/

演示:http://jsfiddle.net/mmzc8/

Both solutions will check if the location that the user clicked was on the element with an ID of info. Assuming that the user did not click on the info element, then hide the info element.

两种解决方案都将检查用户单击的位置是否在ID为info的元素上。假设用户没有单击info元素,则隐藏info元素。

#3


3  

To ensure you have a solution that works on iPads too, then you need to use the following function trigger instead:

为了确保您的解决方案也适用于iPad,您需要使用以下功能触发器:

$(document).on("mousedown touchstart",function(e){
  var $info = $('#info');
  if (!$info.is(e.target) && $info.has(e.target).length === 0) {
    $info.hide();
  }
});

Similarly, if you are looking to cover off mouseup, add 'touchend':

同样,如果您想要覆盖鼠标,请添加'touchend':

$(document).on("mouseup touchend",function(e){
  ...
});

#4


3  

Try this code, this is the best for me.

试试这个代码,这对我来说是最好的。

jQuery('.button_show_container').click(function(e) {
    jQuery('.container').slideToggle('fast'); 
    e.stopPropagation();
});

jQuery(document).click(function() {
        jQuery('.container').slideUp('fast');
});

#5


0  

You can add a class only for check on mouse click that specific div or any within that div element clicked or not.

您可以添加一个类,仅用于检查鼠标单击特定div或该div元素中是否有任何单击。

$(document).click(function(e){            
    if ( !$(e.target).hasClass("[class name for check]") &&
         $("[element class or id]").css("display")=="block" ) {
            //...code if clicked out side div
    }
});

#6


-1  

Try the below solution. It's even working recursive:

尝试以下解决方案。它甚至可以递归工作:

$(document).mouseup(function(e) 
{
    var container = $("YOUR CONTAINER SELECTOR");

    // if the target of the click isn't the container nor a descendant of the container
    if (!container.is(e.target) && container.has(e.target).length === 0) 
    {
        container.hide();
    }
});

Reference - https://*.com/a/7385673/3910232

参考 - https://*.com/a/7385673/3910232