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 :

Simuler un OnBlur sur Div en javascript


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2011
    Messages : 136
    Par défaut Simuler un OnBlur sur Div en javascript
    J'ai conçu une combo box en javascript à l'aide de div pour l'input box et la liste déroulante.
    Mon problème est de simuler un Onblur sur une div afin de gérer les fermetures de la liste déroulante lorsque le focus est perdu. Je sais que le Onblur ne s'applique pas aux div mais je me demande si on peut le simuler par un autre artifice.
    Le but est de traiter la fermeture de la liste déroulante lorsqu'un focus est donné sur un autre objet tel que une iframe, une window, un champ de formulaire, une autre div,...
    Un grand merci à celui qui pourra m'aider !!!

  2. #2
    Membre éclairé Avatar de Pymento
    Homme Profil pro
    Ingé. Info.
    Inscrit en
    Janvier 2008
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingé. Info.

    Informations forums :
    Inscription : Janvier 2008
    Messages : 366
    Par défaut
    Salut, je te propose des solutions, peut être pas les meilleures mais bon^^

    Tu pourrai mettre un onFocus() sur tout les autres inputs.
    Sinon il faudrait que tu récupère le click et les coordonnée de ta souris.
    (un onclick sur le body et screen.X etc... devraient faire l'affaire) et tu sauras à chaque clic si tu doit masquer ou pas ta combo box.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2011
    Messages : 136
    Par défaut
    1- onFocus() sur tous les autres objets : solution pas très propre et beaucoup trop lourde à mettre en place.
    2- Récupérer le click et les coordonnées de la souris dans le body : cela ne me permet pas de gérer le click dans un iframe ou sur une autre window.

    En fait, je cherche à récupérer l'événement qui gère une sorte de 'onblur' sur l'objet div-combo box... De cette façon, peu importe ou on click, on sait que l'on vient de quitter la div.

  4. #4
    Membre Expert 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 : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    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
    24
    <div id="nomDeMonDiv">MON  DIV<span>(enfant de mon div)</span></div>
    <span>autre</span>
    <script type="text/javascript">
    	var monDivHaveFocus = false; // 
    	function onFocusTraitement(monDiv){
    		if(monDivHaveFocus == false) // seulement s'il n'avait pas encore le focus
    			alert('focus'); // execution de onFocus
    		monDivHaveFocus = true; // 
    	}
    	function onBlurTraitement(monDiv){
    		if(monDivHaveFocus == true) // seulement s'il avait le focus
    			alert('blur'); // execution de onBlur
    		monDivHaveFocus = false; //
    	}
    	document.getElementsByTagName('HTML')[0].onclick = function(evt){
      		var evt = window.event || evt; // récupération de l'évènement
      		var target = evt.target || evt.srcElement; // récupération de l'objet cliqué
    		for(;target.nodeName != 'HTML' && target.id != 'nomDeMonDiv';target=target.parentNode); // si les enfants ne sont pas considérés comme le div -> supprimer cette ligne
    		if(target.id == 'nomDeMonDiv')
    			onFocusTraitement(target);
    		else
    			onBlurTraitement(target);
    	};
    </script>

  5. #5
    Membre Expert 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 : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Par défaut
    une seconde approche est de jouer avec les évènements "onmouseover" et "onmouseout" pour savoir si l'on est sur l'objet au moment du clique plutôt que de remonter dans l'arbre du DOM. (mais je préfère ma première solution.)

    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
    <div id="nomDeMonDiv">MON  DIV<span>(enfant de mon div)</span></div>
    <span>autre</span>
    <script type="text/javascript">
    	var monDivHaveFocus = false; // 
    	function onFocusTraitement(monDiv){
    		if(monDivHaveFocus == false) // seulement s'il n'avait pas encore le focus
    			alert('focus'); // execution de onFocus
    		monDivHaveFocus = true; // 
    	}
    	function onBlurTraitement(monDiv){
    		if(monDivHaveFocus == true) // seulement s'il avait le focus
    			alert('blur'); // execution de onBlur
    		monDivHaveFocus = false; //
    	}
    	var over = false;
    	var monDiv = document.getElementById('nomDeMonDiv');
    	monDiv.onmouseover = function(){over=true};
    	monDiv.onmouseout = function(){over=false};
    	document.getElementsByTagName('HTML')[0].onclick = function(){
    		if(over)
    			onFocusTraitement(monDiv);
    		else
    			onBlurTraitement(monDiv);
    	};
    </script>

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2011
    Messages : 136
    Par défaut
    Merci pour ta réponse.
    J'avais déjà implémenté quelque chose qui ressemble à ta première solution en jouant avec target et srcElement mais malheureusement, elle ne fonctionne pas dans le cas suivant :
    1- on click sur la div --> le focus se fait
    2- on click sur une autre div DANS UNE IFRAME --> le blur ne se produit pas, la liste de la combo reste alors ouverte
    Ce n'est pas un cas particulier car de nombreuses pages comportent des div dans la page même et au sein d'un d'iframe
    Le blur ne se produit pas non plus si on click sur un élément d'une autre window.
    Je cherche donc une solution générale qui fonctionnera dans tous les cas, comme l'objet SELECT des FORM...

  7. #7
    Membre Expert 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 : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Par défaut
    rajoute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    window.onblur = function(){ 
        onBlurTraitement(document.getElementById('nomDeMonDiv'));
    };

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

Discussions similaires

  1. [AC-2010] Simuler un clic sur une page web sur une image javascript
    Par alex en droit dans le forum VBA Access
    Réponses: 2
    Dernier message: 02/04/2012, 13h22
  2. onblur sur un div
    Par laxe13 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 07/11/2008, 14h31
  3. Problème innerHTML sur div !!!
    Par aburner dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/01/2005, 09h23
  4. Simuler l'appui sur une touche, au niveau système
    Par debutant java dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 13/08/2004, 12h51
  5. Alimenter le context sur un appel Javascript ?...
    Par Sylvain James dans le forum XMLRAD
    Réponses: 2
    Dernier message: 20/10/2003, 15h44

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