onblur et boutons radio

Invité
Invité n'ayant pas de compte PHPfrance

23 juil. 2007, 19:05

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?

Invité
Invité n'ayant pas de compte PHPfrance

24 juil. 2007, 10:10

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

Invité
Invité n'ayant pas de compte PHPfrance

24 juil. 2007, 11:55

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é?

Invité
Invité n'ayant pas de compte PHPfrance

24 juil. 2007, 12:04

finalement, la vraie question est: comment ajouter deux fonctions javascript à un même élément?

ViPHP
ViPHP | 928 Messages

24 juil. 2007, 12:08

En écrivant du HTML à la main sans passer par une classe à l'intérêt discutable ?

Invité
Invité n'ayant pas de compte PHPfrance

24 juil. 2007, 12:21

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.

ViPHP
ViPHP | 928 Messages

24 juil. 2007, 12:28

Essaie comme ceci :
$form->addElement('radio','one','e.','Otros','e.Otros', array(
   'onclick' => 'trans(this.id, \'one_otros\')',
   'onblur' => 'trans(this.id, \'one_otros\')'
));
Modifié en dernier par Genova le 24 juil. 2007, 12:30, modifié 1 fois.

Eléphant du PHP | 377 Messages

24 juil. 2007, 12:29

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")}); }
Petit scarabée deviendra grand

Invité
Invité n'ayant pas de compte PHPfrance

24 juil. 2007, 12:42

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?

Eléphant du PHP | 377 Messages

24 juil. 2007, 12:57

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 ?
Petit scarabée deviendra grand

Invité
Invité n'ayant pas de compte PHPfrance

24 juil. 2007, 13:24

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?

ViPHP
ViPHP | 928 Messages

24 juil. 2007, 13:26

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é.