Cette question a été posée à plusieurs reprises, mais aucune des réponses ne semble fonctionner pour moi.
Le css de la div est comme suit:
#info{
display: none;
position: fixed;
z-index: 500;
height: 50%;
width: 60%;
overflow: auto;
background: rgba(187, 187, 187, .8);
}
J'ai essayé d'utiliser le code suivant:
$("#info").click(function(e){
e.stopPropagation();
});
$(document).click(function(){
$("#info").hide();
});
ainsi que ce code:
$(document).mouseup(function (e){
var container = $("#info");
if (container.has(e.target).length === 0) {
container.hide();
}
});
Pourtant, chaque fois que je clique sur le div, celui-ci disparaît également.
Quelque chose d'autre qui pourrait fonctionner?
Comme votre cible a id=info
, vous pouvez donc essayer:
$(document).click(function(e) {
// check that your clicked
// element has no id=info
if( e.target.id != 'info') {
$("#info").hide();
}
});
Vous pouvez aussi essayer:
$(document).click(function() {
if( this.id != 'info') {
$("#info").hide();
}
});
$(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();
}
});
Attachez un gestionnaire d'événements onclick
à l'objet document
:
$(document).click(function(e) {
if(e.target.id != 'info') {
$("#info").hide();
}
});
Démo: http://jsfiddle.net/aUjRG/
Voici une solution en JavaScript pur pour vous aider à mieux comprendre ce qui se passe:
function hideInfo(){
if(window.event.srcElement.id != 'info'){
document.getElementById('info').style.display = 'none';
}
}
document.onclick = hideInfo;
Démo: http://jsfiddle.net/mmzc8/
Les deux solutions vérifieront si l'emplacement sur lequel l'utilisateur a cliqué était sur l'élément avec un ID de info
. En supposant que l'utilisateur n'ait pas cliqué sur l'élément info
, masquez l'élément info
.
Essayez ce code, c'est le meilleur pour moi.
jQuery('.button_show_container').click(function(e) {
jQuery('.container').slideToggle('fast');
e.stopPropagation();
});
jQuery(document).click(function() {
jQuery('.container').slideUp('fast');
});
Pour que votre solution fonctionne également sur les iPad, vous devez utiliser le déclencheur de fonction suivant:
$(document).on("mousedown touchstart",function(e){
var $info = $('#info');
if (!$info.is(e.target) && $info.has(e.target).length === 0) {
$info.hide();
}
});
De même, si vous cherchez à couvrir la souris, ajoutez 'touchend':
$(document).on("mouseup touchend",function(e){
...
});
Vous pouvez ajouter une classe uniquement pour vérifier si vous cliquez sur cette div spécifique ou sur un élément de cette div sur lequel vous avez cliqué ou non.
$(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
}
});