Page 1 sur 1

onblur et boutons radio

Posté : 23 juil. 2007, 19:05
par Invité
Bonjour,

J'ai créé une petite fonction qui s'execute onclick sur un bouton radio, ça marche très bien.
Je voudrais que cette meme fonction s'execute quand on clique ailleurs que sur le bouton radio (un autre élément du formulaire).
L'événement ne fonctionne pass onblur(), d'ou ma question: comment déclencher un événement quand un bouton radio perd le focus?

Posté : 24 juil. 2007, 10:10
par Invité
regarde ici : les evenements associés aux elements
http://www.commentcamarche.net/javascript/jsevent.php3

sinon fait voir un bout de code sion on peut trop te dire !
:D

Posté : 24 juil. 2007, 11:55
par Invité
j'ai creusé un peu et voici mon pb:
j'utilise pear pour générer un formulaire, et j'ajoute des fonctions javascript, comme ceci:
$form->addElement('radio','one','e.','Otros','e.Otros', array('onclick="trans(this.id, \'one_otros\')"', 'onblur="trans(this.id, \'one_otros\')"'));
Comme vous le voyez, j'essaye de déclencher la fonction trans onclick et onblur.
Voici le html généré par ce code:
<input onclick="trans(this.id, 'one_otros')"="onclick="trans(this.id, 'one_otros')"" onblur="trans(this.id, 'one_otros')"="onblur="trans(this.id, 'one_otros')"" name="one" value="e.Otros" type="radio" id="qf_2c618f" />
L'événement onlick fonctionne, mais pas le onblur. Voyez vous pourquoi le code généré est mal formé?

Posté : 24 juil. 2007, 12:04
par Invité
finalement, la vraie question est: comment ajouter deux fonctions javascript à un même élément?

Posté : 24 juil. 2007, 12:08
par Genova
En écrivant du HTML à la main sans passer par une classe à l'intérêt discutable ?

Posté : 24 juil. 2007, 12:21
par Invité
je te remercie de me répondre mais me proposer de ne pas utiliser pear quickform ne m'avance pas beaucoup...pour des milliers de raisons qui nous éloigneraient du sujet.

Est-il par exemple possible de déclencher des événements js sans qu'ils ne soient directement "collés" sur l'élément? J'ai testé ceci qui ne marche pas.
Dans le code formulaire:
$form->addElement('text','one_otros','', 'id="one_otros"');
et dans un fichier javascript inclus:
window.document.getElementById("one_otros").onfocus = alert("bonjour");
window.document.getElementById("one_otros").onblur = alert("aurevoir");
Le alert('bonjour') fonctionne une fois au chargement, de la page et ensuite plus de réaction du champ, ni onclick, ni onblur.

Posté : 24 juil. 2007, 12:28
par Genova
Essaie comme ceci :
$form->addElement('radio','one','e.','Otros','e.Otros', array(
   'onclick' => 'trans(this.id, \'one_otros\')',
   'onblur' => 'trans(this.id, \'one_otros\')'
));

Posté : 24 juil. 2007, 12:29
par Shrell
essaie d'adapter ceci :

Code : Tout sélectionner

if (element.attachEvent) { element.attachEvent("onclick", function() {alert("click")}); } if (element.addEventListener) { element.addEventListener("click", function() {alert("click")}); }

Posté : 24 juil. 2007, 12:42
par Invité
super, la proposition de genova génère un code conforme!
J'ai donc ceci:
$form->addElement('radio','one','e.','Otros','e.Otros', array('onclick' => 'trans(this.id, \'one_otros\')', 'onblur' => 'trans(this.id, \'one_otros\')')); 
$form->addElement('text','one_otros','', 'id="one_otros"');
Quand onclick, trans() doit être déclenché, onblur aussi.
trans est une fonction qui change la propriété display de mon champ de texte id=one_otros.
En gros, le but est de masquer ou afficher le champ de texte quand on clique sur le bouton radio.
Voici la fonction js:
function trans (id1, id2)
{
	if (window.document.getElementById(id1).checked == false)
	{
		window.document.getElementById(id2).style.display="none";
	}
	if (window.document.getElementById(id1).checked == true)
	{
		window.document.getElementById(id2).style.display="block";
	}


}
Au chargement de la page (onload) mon champ de texte est masqué par défaut.
Le onclick fonctionne et fait apparaitre le champ de texte, mais le onblur ne le masque pas. Qu'est-ce qui m'échappe?

Posté : 24 juil. 2007, 12:57
par Shrell
Je ne vois pas trop l'utilité du onBlur, je pense que le onClick devrait suffire pour les deux cas (coché, décoché)
Essaie sans le onblur pour voir ce que ça donne ?

Posté : 24 juil. 2007, 13:24
par Invité
J'ai 10 boutons radio dans mon form dont le "one_otros".
Un clic sur "one_otros" affiche le champ de texte comme prévu et comme décrit plus haut.

l'utilité du onblur: je voudrais que le champ de texte ne s'affiche que si le one_otros est coché. Si on clique sur un autre bouton radio le champ de texte doit être remasqué. Je ne pense pas qu'un seul événement onclick puisse gérer cette situation...je me trompe?

Posté : 24 juil. 2007, 13:26
par Genova
Si tu peux, par exemple si tu as 10 bouttons radio avec les ID id_1 id_2 ... id_10 il te suffit de faire une boucle dans ta fonction, et de cacher tous les autres champs, sauf celui correspondant à ton boutton cliqué.