J'aimerais savoir si c'est la bonne façon de masquer des éléments visibles lorsqu'on clique n'importe où sur la page.
$(document).click(function (event) {
$('#myDIV:visible').hide();
});
L'élément (div, span, etc.) ne doit pas disparaître lorsqu'un événement de clic se produit dans les limites de l'élément.
Si je comprends bien, vous souhaitez masquer une div lorsque vous cliquez n'importe où sauf la div, et si vous cliquez tout en survolant la div, il ne devrait PAS se fermer. Vous pouvez le faire avec ce code:
$(document).click(function() {
alert("me");
});
$(".myDiv").click(function(e) {
e.stopPropagation(); // This is the preferred method.
return false; // This should not be used unless you do not want
// any click events registering inside the div
});
Cela lie le clic à la page entière, mais si vous cliquez sur la div en question, l’événement click sera annulé.
Essaye ça
$('.myDiv').click(function(e) { //button click class name is myDiv
e.stopPropagation();
})
$(function(){
$(document).click(function(){
$('.myDiv').hide(); //hide the button
});
});
J'utilise nom de la classe à la place de l'ID, car dans asp.net vous devez vous soucier des choses supplémentaires que .net attache à l'id
EDIT - Puisque vous avez ajouté un autre morceau, cela fonctionnerait comme ceci:
$('.myDiv').click(function() { //button click class name is myDiv
e.stopPropagation();
})
$(function(){
$('.openDiv').click(function() {
$('.myDiv').show();
});
$(document).click(function(){
$('.myDiv').hide(); //hide the button
});
});
Depuis jQuery 1.7, il existe une nouvelle façon de gérer les événements. Je pensais que je devrais répondre ici juste pour montrer comment je pourrais y arriver, à la "nouvelle" façon. Si ce n'est pas le cas, je vous recommande de lire le docs jQuery pour la méthode "on" .
var handler = function(event){
// if the target is a descendent of container do nothing
if($(event.target).is(".container, .container *")) return;
// remove event handler from document
$(document).off("click", handler);
// dostuff
}
$(document).on("click", handler);
Ici, nous abusons des sélecteurs de jQuery et des événements bouillonnants. Notez que je m'assure de nettoyer le gestionnaire d'événements par la suite. Vous pouvez automatiser ce comportement avec $('.container').one
( voir: docs ), mais nous devons effectuer des conditions conditionnelles dans le gestionnaire qui ne sont pas applicables ici.
Cet exemple de code suivant semble fonctionner mieux pour moi. Alors que vous pouvez utiliser 'return false' pour arrêter tout traitement de cet événement pour la div ou pour l'un de ses enfants. Si vous souhaitez avoir des contrôles sur la div contextuelle (un formulaire de connexion contextuel par exemple), vous devez utiliser event.stopPropogation ().
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<a id="link" href="#">show box</a>
<div id="box" style="background: #eee; display: none">
<p>a paragraph of text</p>
<input type="file" />
</div>
<script src="jquery.js" type="text/javascript"></script>
<script type="text/javascript">
var box = $('#box');
var link = $('#link');
link.click(function() {
box.show(); return false;
});
$(document).click(function() {
box.hide();
});
box.click(function(e) {
e.stopPropagation();
});
</script>
</body>
</html>
Merci Thomas. Je suis nouveau chez JS et je cherche une solution à mon problème. Le vôtre a aidé.
J'ai utilisé jQuery pour créer une boîte de connexion qui glisse vers le bas. Pour une meilleure expérience utilisateur, je souhaitais que la boîte disparaisse lorsqu'un utilisateur clique quelque part que la boîte. Je suis un peu gêné d'utiliser environ quatre heures pour régler ce problème. Mais bon, je suis nouveau à JS.
Peut-être que mon code peut aider quelqu'un:
<body>
<button class="login">Logg inn</button>
<script type="text/javascript">
$("button.login").click(function () {
if ($("div#box:first").is(":hidden")) {
$("div#box").slideDown("slow");}
else {
$("div#box").slideUp("slow");
}
});
</script>
<div id="box">Lots of login content</div>
<script type="text/javascript">
var box = $('#box');
var login = $('.login');
login.click(function() {
box.show(); return false;
});
$(document).click(function() {
box.hide();
});
box.click(function(e) {
e.stopPropagation();
});
</script>
</body>
Ce que vous pouvez aussi faire, c'est:
$(document).click(function (e)
{
var container = $("div");
if (!container.is(e.target) && container.has(e.target).length === 0)
{
container.fadeOut('slow');
}
});
Si votre cible n'est pas une div, masquez la div en vérifiant que sa longueur est égale à zéro.
J'ai fait le dessous. Pensée de partager afin que quelqu'un d'autre puisse également en bénéficier.
$("div#newButtonDiv").click(function(){
$(this).find("ul.sub-menu").css({"display":"block"});
$(this).click(function(event){
event.stopPropagation();
$("html").click(function(){
$(this).find("ul.sub-menu").css({"display":"none"});
}
});
});
Faites-moi savoir si je peux aider quelqu'un à ce sujet.
Une autre façon de masquer le conteneur div lorsqu'un clic survient dans un élément non enfant;
$(document).on('click', function(e) {
if(!$.contains($('.yourContainer').get(0), e.target)) {
$('.yourContainer').hide();
}
});
Essaye ça:
$(document).mouseup(function (e) {
var div = $("#yourdivid");
if (!div.is(e.target) && div.has(e.target).length === 0)
{
div.hide();
}
});
$(document).on('click', function(e) { // Hides the div by clicking any where in the screen
if ( $(e.target).closest('#suggest_input').length ) {
$(".suggest_div").show();
}else if ( ! $(e.target).closest('.suggest_container').length ) {
$('.suggest_div').hide();
}
});
Ici #suggest_input est le nom de textbox et .suggest_container est le nom de la classe ul et .suggest_div est le principal élément div de ma suggestion automatique.
ce code sert à masquer les éléments div en cliquant n'importe où sur l'écran. Avant de tout faire, veuillez comprendre le code et le copier.
$('html').click(function() {
//Hide the menus if it is visible
});
$('#menu_container').click(function(event){
event.stopPropagation();
});
mais vous devez également garder à l’esprit ces éléments. http://css-tricks.com/dangers-stopping-event-propagation/
Essayez ceci, cela fonctionne parfaitement pour moi.
$(document).mouseup(function (e)
{
var searchcontainer = $("#search_container");
if (!searchcontainer.is(e.target) // if the target of the click isn't the container...
&& searchcontainer.has(e.target).length === 0) // ... nor a descendant of the container
{
searchcontainer.hide();
}
});
Voici une solution CSS/small JS opérationnelle basée sur la réponse de Sandeep Pal:
$(document).click(function (e)
{
if (!$("#noticeMenu").is(e.target) && $("#noticeMenu").has(e.target).length == 0)
{
$("#menu-toggle3").prop('checked', false);
}
});
Essayez-le en cliquant sur la case à cocher puis en dehors du menu:
Cela ne fonctionne pas - il cache le fichier .myDIV lorsque vous cliquez à l'intérieur.
$('.openDiv').click(function(e) {
$('.myDiv').show();
e.stopPropagation();
})
$(document).click(function(){
$('.myDiv').hide();
});
});
<a class="openDiv">DISPLAY DIV</a>
<div class="myDiv">HIDE DIV</div>
$(document).ready(function(){
$("button").click(function(){
$(".div3").toggle(1000);
});
$("body").click(function(event) {
if($(event.target).attr('class') != '1' && $(event.target).attr('class') != 'div3'){
$(".div3").hide(1000);}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script>
<button class="1">Click to fade in boxes</button><br><br>
<body style="width:100%;height:200px;background-color:pink;">
<div class="div3" style="width:80px;height:80px;display:none;background-color:blue;"></div><body>
Juste 2 petites améliorations aux suggestions ci-dessus:
arrêter la propagation sur l'événement qui l'a déclenchée, en supposant que c'est un clic
jQuery(thelink).click(function(e){
jQuery(thepop).show();
// bind the hide controls
var jpop=jQuery(thepop);
jQuery(document).bind("click.hidethepop", function() {
jpop.hide();
// unbind the hide controls
jQuery(document).unbind("click.hidethepop");
});
// dont close thepop when you click on thepop
jQuery(thepop).click(function(e) {
e.stopPropagation();
});
// and dont close thepop now
e.stopPropagation();
});
$(document).mouseup(function (e)
{
var mydiv = $('div#mydiv');
if (!mydiv.is(e.target) && mydiv.has(e.target).length === 0){
search.slideUp();
}
});
$( "element" ).focusout(function() {
//your code on element
})