IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

Comment détecter qu'on a cliqué en dehors d'une div ?


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut Comment détecter qu'on a cliqué en dehors d'une div ?
    Bonjour,
    Je cherche à détecter que l'utilisateur a cliqué en dehors d'une div affichée au dessus de la page pour effacer cette div.

    En Javascript pur ou en JQuery si c'est lus simple.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  2. #2
    Membre confirmé Avatar de lightbulb
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 108
    Par défaut
    Du vu et revu en jQuery :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $(document).mouseup(function (e){
        var container = $("#tadiv");
        if (container.has(e.target).length === 0)
            container.hide();
    });

  3. #3
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Merci pour le tuyau mais j'ai besoin d'un peu plus de précision et j'en donne sur le but de la manoeuvre.

    J'ai une zone de texte pour saisir une recherche. En autocomplétion, si du contenu est trouvé apparaît sous la zone de texte une div avec la liste des résultats. Si on clique sur un résultat, on affiche le détail du résultat mais si on clique en dehors de la div de résultat, je dois la faire disparaître.

    Ton code perturbe beaucoup l'autocomplétion. Peut-être ne l'ai-je pas mis où il faut, entre balises script dans le programme PHP qui contient la zone de recherche :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <script type="text/javascript">
    	$(document).mouseup(function (e){
    		    var container = $("#search_result");
    		    if (container.has(e.target).length === 0)
    		        container.hide();
    	});
    </script>
    		<div id="zone_search">
    			<form name="form_search" 
    				action="javascript:completeSearch('<?php echo $la_langue; ?>');" 
    				method="post"
    			>
    				<input type="text" 
    					name="input_search" 
    					value="<?php echo $trad_search; ?>" 
    					id="input_search" 
    					onclick="javascript:eraseSearch('<?php echo $la_langue; ?>');"
    					onkeyup="javascript:interactiveSearch(this.value, '<?php echo $la_langue; ?>')"
    					autocomplete="off"
    				/>
    				<input type="submit" 
    					name="button_search" 
    					value=""
    					id="button_search" 
    				/>
    			</form>
    			<div id="search_result">&nbsp;</div>
    		</div><!-- Fin zone_search -->
    La div de résultat est, comme son nom l'indique : <div id="search_result">&nbsp;</div>
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    @lightbulb, je pense que c'est plutôt le contraire qu'il faut faire... Toi, tu cherches si l'élément qui a reçu l'événement contient celui recherché, il faut plutôt vérifier si l'élément qui a reçu l'événement est contenu dans celui recherché :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $(document).on('click', function(e){
        var $this = $(e.target);
        if(!$this.closest('#search_result')){
            $("#search_result").hide();
        }
    });
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $( document ).on( "click", function( e ){
        if ( e.target.id != "search_result" ){
            $( "#search_result" ).hide();
        }
    });

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  6. #6
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Daniel, si l'élément #search_result contient des enfants et que l'on clique sur l'un de ces enfants, ton code ne marche plus, d'où le .closest()
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 07/12/2014, 00h02
  2. Image en dehors d'une div
    Par ric009 dans le forum Mise en page CSS
    Réponses: 14
    Dernier message: 14/01/2014, 20h30
  3. Evènement quand on clique en dehors d'une div
    Par socket77 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/12/2009, 10h39
  4. GRID : Comment détecter les coordonnées de la cellule cliquée ?
    Par nazimyenier dans le forum Windows Presentation Foundation
    Réponses: 8
    Dernier message: 29/07/2009, 16h56
  5. [POO] Comment tester le contenu du nom de class d'une div ?
    Par Vincdeladrome dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/03/2008, 21h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo