2015-10-11 13 views
5

Voglio fare un popup che dovrebbe apparire quando si fa clic su un pulsante e scompare quando l'utente fa clic all'esterno della casella.Fare clic su div esterno per nascondere div in puro JavaScript

Non sono sicuro di come far sparire il div quando clicco al di fuori di esso.

var popbox = document.getElementById("popbox"); 

document.getElementById("linkbox").onclick = function() { 
    popbox.style.display = "block"; 
}; 

???.onclick = function() { 
    popbox.style.display = "none"; 
}; 
+0

Una domanda. Molti popup hanno uno sfondo scuro. Se hai uno sfondo scuro, puoi semplicemente ascoltare i clic sullo sfondo scuro per nascondere il popup. – www139

+0

Puoi farlo sullo sfondo di tutta la pagina, a patto che i gestori di clic per aree più piccole all'interno di esso utilizzano stopPropagation. –

risposta

6

Ecco la seconda versione, che ha una mascherina trasparente come richiesto dal richiedente nei commenti ...

window.onload = function(){ 
 
\t var popup = document.getElementById('popup'); 
 
    var overlay = document.getElementById('backgroundOverlay'); 
 
    var openButton = document.getElementById('openOverlay'); 
 
    document.onclick = function(e){ 
 
     if(e.target.id == 'backgroundOverlay'){ 
 
      popup.style.display = 'none'; 
 
      overlay.style.display = 'none'; 
 
     } 
 
     if(e.target === openButton){ 
 
      \t popup.style.display = 'block'; 
 
      overlay.style.display = 'block'; 
 
     } 
 
    }; 
 
};
#backgroundOverlay{ 
 
    background-color:transparent; 
 
    position:fixed; 
 
    top:0; 
 
    left:0; 
 
    right:0; 
 
    bottom:0; 
 
    display:block; 
 
} 
 
#popup{ 
 
    background-color:#fff; 
 
    border:1px solid #000; 
 
    width:80vw; 
 
    height:80vh; 
 
    position:absolute; 
 
    margin-left:10vw; 
 
    margin-right:10vw; 
 
    margin-top:10vh; 
 
    margin-bottom:10vh; 
 
    z-index:500; 
 
}
<div id="popup">This is some text.<input type="button" id="theButton" value="This is a button"></div> 
 
    <div id="backgroundOverlay"></div> 
 
    <input type="button" id="openOverlay" value="open popup">

Ecco la prima versione. ..

Qui è un po 'di codice Se c'è qualcos'altro da aggiungere, per favore fatemelo sapere :)

L'oggetto evento (e) dà accesso alle informazioni sull'evento. e.target ti dà l'elemento che ha attivato l'evento.

window.onload = function(){ 
 
    var divToHide = document.getElementById('divToHide'); 
 
    document.onclick = function(e){ 
 
    if(e.target.id !== 'divToHide'){ 
 
     //element clicked wasn't the div; hide the div 
 
     divToHide.style.display = 'none'; 
 
    } 
 
    }; 
 
};
<div id="divToHide">Click outside of this div to hide it.</div>

+0

Il fatto è che sto creando una finestra popup con: document.getElementById ("linkbox"). Onclick = function() { popbox.style.display = "block"; }; E voglio nasconderlo una volta che l'utente fa clic fuori dalla scatola. Quindi ho bisogno del codice per far apparire la scatola una volta cliccata e scomparire una volta cliccato all'esterno. –

+1

Questa è un'ottima risposta, e solo per aggiungere un po 'questo, devi impostare il tuo css come '#popup * {pointer-events: none}' se non c'è nulla di rilevante che l'utente possa cliccare all'interno del popup. Altrimenti, se si fa clic su un elemento all'interno della casella, gli ID non corrisponderanno (restituirà l'ID del figlio) e lo script assumerà che si sia fatto clic fuori dalla casella. –

+0

Ecco cos'è successo David ... Ci sono cose importanti all'interno del popup. –

-4

Ok, ecco una soluzione basata jQuery in base a qualsiasi div cliccato all'interno del DOM.

$('div').on('click', function(e){ 
    var parents = $(e.currentTarget).parents(); 
    for (var i = 0; i < parents.length; i++) { 
     if (parents[i].id === 'divToHide' || e.currentTarget.id === 'divToHide') { 
      // you are in the popup 
     }; 
    } 
    e.stopPropagation(); 
}); 

Questo guarda il tuo elemento attuale, così come uno qualsiasi dei genitori, e controlla se l'id corrisponde. Se divToHide si trova nell'elenco dei genitori(), mantieni il popup aperto.

* NOTA: Ciò richiede il wrapping del contenuto all'interno di un div wrapper o qualcosa di simile.

+1

Si prega di non pubblicare le risposte 'jQuery' a domande' javascript'. Leggi il tag. – Oka

0
el.onmouseleave = function(){ 
    document.body.onclick = function(){ 
    el.style.display = 'none'; 
    document.body.onclick = null; 
    } 
} 
+2

Si prega di modificare con ulteriori informazioni. Le risposte solo per codice e "prova questo" sono scoraggiate, perché non contengono contenuti ricercabili e non spiegano perché qualcuno dovrebbe "provare questo". – abarisone

Problemi correlati