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

JavaScript Discussion :

Equivalent évènement onblur pour une div


Sujet :

JavaScript

  1. #1
    Membre actif
    Inscrit en
    Février 2009
    Messages
    619
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 619
    Points : 249
    Points
    249
    Par défaut Equivalent évènement onblur pour une div
    Bonjour,

    Savez-vous comment on peut faire pour obtenir l'équivalent de l'évènement onblur avec une DIV ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <div type="text" onblur="alert('blur');" >
    test
    </div>
    Merci de votre aide.

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 048
    Points : 44 562
    Points
    44 562
    Par défaut
    Bonsoir,
    difficile de répondre une DIV n'ayant pas prise de focus, essaies avec mouseout.

  3. #3
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Code : 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
     
    var monDiv = document.getElementById('id_de_mon_div');
    function my_blur(){
    	// ...
    }
    var monDivIsFocused = false;
    monDiv.onclick = function(){monDivIsFocused=true;};
    // utiliser addEventListenner et attachEvent au lieu de "onclick" si le code est important et que d'autres événements "onclick" peuvent s'attacher au body
    document.body.onclick = function(e){
    	var evt = window.event || e; 
    	var target = evt.target || evt.srcElement; 
    	var clickOnDiv = false;
    	while( target && !clickOnDiv){
    		if( target.id == monDiv)
    			clickOnDiv = true;
    		target = target.parentNode;
    	}
    	if(clickOnDiv && monDivIsFocused){
    		monDivIsFocused = false;
    		my_blur();
    	}
    	return true;
    };
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    eval(a='eval(a)')
    recursive make it evil
    eval make it eval

  4. #4
    Membre actif
    Inscrit en
    Février 2009
    Messages
    619
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 619
    Points : 249
    Points
    249
    Par défaut
    Merci pour ce bout de code interressant, j'ai donc testé mais sans résultat :

    Code : 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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <html>
    <head>
     
     
    <script>
    var monDiv = document.getElementById('mondiv');
    function my_blur(){
    	alert('onblur');
    }
    var monDivIsFocused = false;
    monDiv.onclick = function(){monDivIsFocused=true;};
    // utiliser addEventListenner et attachEvent au lieu de "onclick" si le code est important et que d'autres événements "onclick" peuvent s'attacher au body
    document.body.onclick = function(e){
    	var evt = window.event || e;
    	var target = evt.target || evt.srcElement;
    	var clickOnDiv = false;
    	while( target && !clickOnDiv){
    		if( target.id == monDiv)
    			clickOnDiv = true;
    		target = target.parentNode;
    	}
    	if(clickOnDiv && monDivIsFocused){
    		monDivIsFocused = false;
    		my_blur();
    	}
    	return true;
    };
    </script>
    </head>
     
    <body>
     
     
     
    <div id="mondiv" style="border: 1px solid red">
    test
    </div>
     
    </body>
    </html>

  5. #5
    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 : 53
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    testé mais sans résultat


    A tout hasard, tu as mis quoi dans la fonction my_blur() ?
    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

  6. #6
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Citation Envoyé par dominos Voir le message
    Merci pour ce bout de code interressant, j'ai donc testé mais sans résultat :
    Normal, étant donné que tu scriptes avant que ta div soit chargée. Diffère avec un evènement load, ou place ton script après ta div.

    @Willpower> Réinventer le focus pour pouvoir réinventer le blur… Astucieux
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Février 2006
    Messages : 81
    Points : 154
    Points
    154
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if( target.id == monDiv)
    A remplacer par
    if(target.id == "id_de_mon_div") // tu fais .id donc tu dois comparer des strings
    ou bien
    if(target === monDiv) // l'objet est le même
    Sinon ça serait de mieux de le faire en jquery, un peu près la même logique, mais gérer les évènements par le model évènementiel jquery pour éviter des problèmes sur d'autre browser, et aussi réduire le code

  8. #8
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Citation Envoyé par amezghal Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if( target.id == monDiv)
    A remplacer par


    ou bien


    Sinon ça serait de mieux de le faire en jquery, un peu près la même logique, mais gérer les évènements par le model évènementiel jquery pour éviter des problèmes sur d'autre browser, et aussi réduire le code
    oups, pour le premier j'avais effectivement d'abord proposé une version ou on comparait les id et puis j'ai édité pour remplacer par l'objet directement (en oubliant de modifier un des 2 coté)


    pour jquery, ne sachant pas s'il utilisait la librairie j'ai voulu lui proposer une solution en js pur.

    edit: "pour éviter des problèmes sur d'autre browser", je pense que le code que j'ai proposé est compatible avec la plupart des browsers.
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    eval(a='eval(a)')
    recursive make it evil
    eval make it eval

  9. #9
    Membre actif
    Inscrit en
    Février 2009
    Messages
    619
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 619
    Points : 249
    Points
    249
    Par défaut
    Merci pour ces réponses...

    En fait ce que je cherche à faire, c'est afficher une div (show/hide) en cliquant depuis un bouton <img>.

    Si le clique s'effectue sur un autres endroit de la page, la div ouverte se ferme également.

    je développe un composant similaire à un <select> avec des checkbox dedant..., je voudrais que ça réagisse de même façon.

  10. #10
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Février 2006
    Messages : 81
    Points : 154
    Points
    154
    Par défaut
    Donc tu n'as pas besoin du focus.
    tu veux juste hider le conteneur des que tu cliques ailleurs

    en jquery
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    //supposant que l'id du conteneur est : "select_container"
    var selectContainer = $('#select_container');
    $(document.body).click(function(){
       if(selectContainer .has(this).length == 0){
           //le click est en dehors du container; tu le hide
           selectContainer.hide();
       }
    })
    Il y une autre methode avec stopPropagation (mais pas conseillée)
    aussi je pense qu'il y a un plugin jquery "clickout" qui gère ça

  11. #11
    Membre actif
    Inscrit en
    Février 2009
    Messages
    619
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 619
    Points : 249
    Points
    249
    Par défaut
    Trouvé sur http://stackoverflow.com/questions/4...kout-in-jquery
    mais pour l'instant rien ne fonctionne...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var $box = $('#box'); 
    $(document.body).click(function(){ 
        if (!$box.has(this).length) { // if the click was not within $box 
            $box.hide(); 
        } 
    });

  12. #12
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 048
    Points : 44 562
    Points
    44 562
    Par défaut
    Bonjour,
    un petit exemple de ce qui devrait te satisfaire
    Code html : 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
    29
    30
    31
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>[...]</title>
    <style type="text/css">
    html, body {
      height : 100%;
      width : 100%;
    }
    #la_div {
      width : 100px;
      height : 100px;
      border : 1px solid #e0e0e0;
    }
    </style>
    </head>
    <body>
    <div id="la_div">Hello World !</div>
    <script type="text/javascript">
    var oDiv = document.getElementById('la_div');
    document.body.onclick = function(e){
      var oElem = e ? e.target : event.srcElement;
      if( oElem !== oDiv){
        oDiv.style.display = 'none'
        alert( 'Y a plus!!!');
      }
    }
    </script>
    </body>
    </html>
    plugin DVP inside en 7 lignes

    Trouvé sur http://stackoverflow.com/questions/4...kout-in-jquery
    mais pour l'instant rien ne fonctionne...
    on ne peut pas gagner à tous les coups

  13. #13
    Membre actif
    Inscrit en
    Février 2009
    Messages
    619
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 619
    Points : 249
    Points
    249
    Par défaut
    merci pour l'exemple je pensais que le code en dehors d'un balise head n'était pas très conventionnel...

  14. #14
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    C'est très juste, et c'est pour ça que je te conseillais d'utiliser un évènement de load
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  15. #15
    Membre actif
    Inscrit en
    Février 2009
    Messages
    619
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 619
    Points : 249
    Points
    249
    Par défaut
    Bonsoir,

    auriez-vous un exemple svp, juste quelques lignes pour me donner une idée,
    j'ai plutôt l'impression que pour réaliser ce type de composant faut tout mettre dans un css...

    merci d'avance

  16. #16
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Citation Envoyé par dominos Voir le message
    Bonsoir,

    auriez-vous un exemple svp, juste quelques lignes pour me donner une idée,
    j'ai plutôt l'impression que pour réaliser ce type de composant faut tout mettre dans un css...

    merci d'avance
    le code de "noSmoking" ne fonctionne pas ?
    ou bien, c'est juste le fait de mettre la balise script après le body qui te gène ?
    si c'est cela, tu la places dans le head et tu englobes le contenu du script par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    window.onload = function(){
    ...
    };
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    eval(a='eval(a)')
    recursive make it evil
    eval make it eval

  17. #17
    Membre actif
    Inscrit en
    Février 2009
    Messages
    619
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 619
    Points : 249
    Points
    249
    Par défaut
    Oui c'est ce que j'ai fait hier soir merci.

  18. #18
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 048
    Points : 44 562
    Points
    44 562
    Par défaut
    il serait peut être intéressant que tu nous <edit>montres</edit> la construction de ton code.

    <edit>cela va faire plaisir à RomainVALERI </edit>

  19. #19
    Membre actif
    Inscrit en
    Février 2009
    Messages
    619
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 619
    Points : 249
    Points
    249
    Par défaut
    dsl, oublié de cocher "résolu",
    et merci à vous tous.

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

Discussions similaires

  1. Plusieurs évènements javascript pour une même action
    Par niacinside dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 16/06/2008, 14h56
  2. taille minimal pour une div
    Par Invité(e) dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 07/04/2008, 11h51
  3. [DOM] Pb gestion de l'évènement mouseout sur une <DIV>
    Par rvux69 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 22/01/2007, 21h27
  4. ascenseur pour une div
    Par crampouz dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 03/07/2006, 14h51
  5. [CSS] propriété resizable pour une div ?
    Par 10-nice dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 22/09/2005, 10h12

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