|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() Développeur Web Inscription : avril 2011 Messages : 44 ![]() |
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 !!! |
|
|
00
|
|
|
#2 |
|
Membre confirmé
![]() Ingé. Info. Inscription : janvier 2008 Messages : 338 ![]() |
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.
__________________
Memento Quia Pulvis Es, Et In Pulverem ReverteriS |
|
|
00
|
|
|
#3 |
|
Candidat au titre de Membre du Club
![]() Développeur Web Inscription : avril 2011 Messages : 44 ![]() |
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. |
|
|
00
|
|
|
#4 | ||
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 860 ![]() |
Code :
|
||
|
|
00
|
|
|
#5 | ||
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 860 ![]() |
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 :
|
||
|
|
00
|
|
|
#6 |
|
Candidat au titre de Membre du Club
![]() Développeur Web Inscription : avril 2011 Messages : 44 ![]() |
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... |
|
|
00
|
|
|
#7 | ||
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 860 ![]() |
rajoute :
Code :
|
||
|
|
00
|
|
|
#8 |
|
Candidat au titre de Membre du Club
![]() Développeur Web Inscription : avril 2011 Messages : 44 ![]() |
J'ai ajouté de window.onblur à mon code et cela fonctionne sous Chrome, Firefox, Safari mais pas sous Opéra et Internet Explorer...
|
|
|
00
|
|
|
#9 | |
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 860 ![]() |
Citation:
solution pour IE : (lol)
|
|
|
|
00
|
|
|
#10 |
|
Candidat au titre de Membre du Club
![]() Développeur Web Inscription : avril 2011 Messages : 44 ![]() |
Cela fonctionne quand on click dans la page puis dans l'iframe --> la div de la page a reçu le 'blur'
Mais pas quand on click dans l'iframe puis dans la page --> la div de l'iframe n'a pas reçu le 'blur' |
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 860 ![]() |
les (i)frames sont hebergées sur le même domaine que la page principale ?
|
|
|
00
|
|
|
#12 |
|
Candidat au titre de Membre du Club
![]() Développeur Web Inscription : avril 2011 Messages : 44 ![]() |
Oui.
Je t'envoie le zip de ce que j'ai fait, tu pourras peut-être voir ce qui ne va pas... Fichier à lancer dans le browser : test.html Encore merci pour le coup de main !!! |
|
|
00
|
|
|
#13 | |||
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 860 ![]() |
Citation:
Code :
assigner un object qui n'existe pas encore. |
|||
|
|
00
|
|
|
#14 |
|
Candidat au titre de Membre du Club
![]() Développeur Web Inscription : avril 2011 Messages : 44 ![]() |
Mauvais copier-coller quand je t'ai transmis le fichier. J'ai dû prendre des bouts de code pour composer le zip. Normalement, le bout de code concernant le click_check est à la fin du fichier ddlb_class.js. Le reste semble ok au niveau des copier-coller.
|
|
|
00
|
|
|
#15 | ||||
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 860 ![]() |
j'ai vraiment la flemme de l'adapter à ton code. (désolé hein.)
donc voici une version qui fonctionne (même sous opéra) : page principale : Code :
Code :
|
||||
|
|
00
|
|
|
#16 | ||
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 860 ![]() |
solution qui gère une div dans la page enfant ET une div dans la page parent :
page principale : Code :
Code :
<div id="monDivFrame" style="background-color:green;height:100px;">MON DIV IFRAME</div> |
||
|
|
00
|
|
|
#17 |
|
Candidat au titre de Membre du Club
![]() Développeur Web Inscription : avril 2011 Messages : 44 ![]() |
Merci pour ta solution qui marche sûrement.
Je cherche en fait une solution globale qui ne tient pas compte d'éléments spécifiques tels que les iframes ou les windows. Je cherche à avoir une classe combobox (ddlb_class.js dans le fichier zip) que je peux utiliser dans les windows, iframes,... sans code spécifique pour des iframe filles ou autres objets. Le code que je t'ai envoyé ne tient justement pas compte d'iframe filles ou de windows générées mais ne fonctionne pas malheureusement sous ie ou opéra. Pas facile d'exprimer ce que je veux mais en gros, je cherche à ne pas avoir de code spécifique à des objets. |
|
|
00
|
|
|
#18 | ||||||
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 860 ![]() |
t'es difficile toi
bon, voici une version générique avec des fonctions "setFocus" et "setBlur" applicable à autant d'objets que tu le souhaites : page principale : Code :
Code :
Code :
résultat en ligne : http://willpower.110mb.com/sources/focus.htm |
||||||
|
|
00
|
|
|
#19 |
|
Candidat au titre de Membre du Club
![]() Développeur Web Inscription : avril 2011 Messages : 44 ![]() |
Merci pour ta réponse assez complète et merci de prendre le temps de répondre, j'apprécie.
Tu vas me trouver plutôt chiant mais le script n'est pas assez portable pour une application web. Le fait de définir la fonction 'window.top.onload' dans l'iframe rend le code pas assez générique, tout comme la boucle 'for(i=0;i<window.frames.length;i++)' dans la page principale. N'existe-t-il pas d'événement que l'on puisse court-circuiter qui s'active lorsque l'on quitte une div pour une autre window ou une autre (i)frame ? Ou ne peut-on pas reproduire de 'window.onblur=click_check;' sous ie et opéra ? |
|
|
00
|
|
|
#20 | |||
|
Membre Expert
![]() Boris Dessysans emploi Inscription : décembre 2010 Messages : 860 ![]() |
Citation:
bon, je t'ai fait une version bien générique : démo : http://willpower.110mb.com/sources/test2.html utlisation : (s'utilise de la même manière sur une iframe que sur la page principale : code à placer à la fin du body) Code :
|
|||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com