Je veux faire un popup div qui disparaît quand je clique à l'extérieur. J'ai besoin de js purs, pas de jQuery ou de quelque chose. donc je fais ce qui suit ...javascript élément body.onclick attatch event setTimeout
fonction qui font div Dissapear:
function closePopUps(){
if(document.getElementById('contact-details-div'))
document.getElementById('contact-details-div').style.display = 'none';
//...same code further...
}
function closePopUpsBody(e){
//finding current target - http://www.quirksmode.org/js/events_properties.html#target
var targ;
if (!e) var e = window.event;
if (e.target) targ = e.target;
else if (e.srcElement) targ = e.srcElement;
if (targ.nodeType == 3) // defeat Safari bug
targ = targ.parentNode;
//is we inside div?
while (targ.parentNode) {
//filtering "Close" button inside div
if (targ.className && targ.className == 'closebtn')
break;
if (targ.className && targ.className == 'contact-profile-popup')
break;
targ = targ.parentNode;
}
//if it not a div, or close button, hide all divs and remove event handler
if ((targ.className && targ.className == 'closebtn')
|| !(targ.className && targ.className == 'contact-profile-popup')) {
if(document.getElementById('contact-details-div'))
document.getElementById('contact-details-div').style.display = 'none';
//...some more code here...
document.body.onclick = null;
}
}
peut-être ce code est laid, mais pas un problème principal ...
principal problème est quand j'attache un événement au corps, il s'exécute immédiatement! et div disparaît immédiatement, je ne le vois même pas.
<tr onclick="
closePopUps();
document.getElementById('contact-details-div').style.display='block';
document.body.onclick = closePopUpsBody;
return false;">
Je pense que si je n'utilise pas de parenthèses, il ne s'exécutera pas?
document.body.onclick = closePopUpsBody(); //this executes
document.body.onclick = function(){closePopUpsBody()}; //this is not
document.body.onclick = closePopUpsBody; //this is not
enfin j'ai fini avec cette décision
<tr onclick="
closePopUps();
document.getElementById('contact-details-div').style.display='block';
setTimeout('document.body.onclick = closePopUpsBody;', 500);
return false;">
mais je pense que c'est de la folie. alors, qu'est-ce que je fais mal?
Pouvez-vous donner un lien vers un exemple en direct, ou mieux, un jsfiddle? 'document.body.onclick = closePopUpsBody' devrait fonctionner comme prévu. –
Lorsque vous avez 'document.body.onclick = closePopUpsBody', que se passe-t-il exactement lorsque vous cliquez? Vous obtenez une erreur? –
merci pour les réponses, vous avez tous eu raison - problème en l'absence de stopPropagation en tr inline onclick code – llamerr