Champ dynamique qui se change à la saisie d'un autre champ

Arthurino
Invité n'ayant pas de compte PHPfrance

18 janv. 2007, 11:37

Bonjour,

J'suis noob, j'ai fait des bribes de scripts et voudrais savoir comment je peux faire pour que lorsque je saisis dans un champ A une valeur, ca me change instantanément et de façon continue, en direct mon champ B (c'est pour faire une sorte de convertisseur dynamique. Je voudrais ne pas avoir à déclencher d'évènement bouton...J'espère être clair dans mes explications. Si vous pouviez m'aider merci, car je sais pas comment faire :?

Arthurino

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

18 janv. 2007, 11:49

ça s'appelle "listes déroulantes liées" et on trouve ça en utilisant le moteur de recherche du forum. ;)

Invité
Invité n'ayant pas de compte PHPfrance

18 janv. 2007, 12:08

Non non moi je n'utilise pas les menus déroulants c'est 2 champs texte...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

18 janv. 2007, 12:21

Alors, il y a plusieurs solutions :
1/ Tout en JavaScript
Il suffit d'ajouter l'évenement, onChange ou onKeyPress sur ton champ qui appelle une fonction JavaScript
exemple

Code : Tout sélectionner

<input type="text" name="champ1" id="champ1" onkeypress="javascript: convert_value(this.value);" /> <input type="text" name="champ2" id="champ2" /> <script type="text/javascript"> function convert_value(valeur) { //Calcul document.getElementById("champ2").value = valeur; } </script>
2/ Calcul en PHP
Utilise la même base que la précédente mais la fonction onkeypress() doit lancer un appel AJAX.
Tu peux t'aider du tutoriel qui est dans la FAQ sur les listes liées, c'est le même principe ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 janv. 2007, 12:23

Tu peux détecter la perte du focus sur le champ avec l'attribut onBlur. Ainsi dès que l'utilisateur quitte le champ, tu peux lances une (ou plusieursà) instructions javascript.
(Tu peux aussi utiliser onChange qui fait quasiment de même, mais j'ai jamais été très satisfait de son efficacité...)

Sinon tu peux utiliser l'attribut onKeyPress pour détecter une saisie dans le champ, voire onKeyDown (lorsque l'utilisateur presse sa touche, mais que la valeur n'a pas encore été renseignée dans le champ) ou onKeyUp (lorsque l'utilisateur relache la touche, le champ a été renseigné)

<input .... onBlur="alert('Vous avez quitté le champ.');" />
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

18 janv. 2007, 13:14

MERCI A VOUS !!! CA MARCHE PRESQUE :)

La solution tout en javascript de Zeus correspond parfaitement à mes attentes. Le seul hic c'est que ca n'écrit pas le premier caractère mais commence à écrire qu'à partir du 2ème caractère saisi lol...

champ 1 : 1 champ 2 :
champ 1 : 12 champ 2 : renvoie 1
...

Ca doit pas être méchant :o

Arthurino

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

18 janv. 2007, 13:19

C'est surement parce qu'au moment où tu appuie (onkeypress), le caractère n'est pas apparu dans le 1er champ :-k
Essaye onkeyup (relâcher la touche)

Par contre, comme c'est du JS, pense bien à essayer sous IE et FF car ils ont des interprétations différentes ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Invité
Invité n'ayant pas de compte PHPfrance

18 janv. 2007, 13:27

C'est surement parce qu'au moment où tu appuie (onkeypress), le caractère n'est pas apparu dans le 1er champ :-k
Essaye onkeyup (relâcher la touche)
ZEUS PRESIDENT !!!!!
TIP TOP RESOLU !
MERCI MERCI MERCI...y en a 1000 :P

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

18 janv. 2007, 14:14

ZEUS PRESIDENT !!!!!
;)
TIP TOP RESOLU !

C'est fait pour toi
MERCI MERCI MERCI...y en a 1000 :P
for ($i=0; $i < 1000; $i++)
{
  echo "MERCI ";
}
Ah, c'était pas une question :oops:
:langue:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 janv. 2007, 16:31

Ah, c'était pas une question :oops: :langue:
C'est surtout que c'est franchement pas approprié, voire même décevant de la part d'un modérateur tel que toi...
c'est vrai quoi... t'es dans la section javascript après tout ;)

Code : Tout sélectionner

for (var i=0; i < 1000; i++) { document.write "MERCI "; }
:langue:
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

18 janv. 2007, 16:42

:lol: :lol: :lol:

ViPHP
ViPHP | 1961 Messages

18 janv. 2007, 16:45

Monsieur le modérateur Ryle

J'ai essayé votre code

Code : Tout sélectionner

<html><head><title></title></head><body><script type="text/javascript"> for (var i=0; i < 1000; i++) { document.write "MERCI "; } </script></body></html>
et rien ne s'affiche, pourquoi ?
write(), ne serait pas une méthode de l'objet JS document ?
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

18 janv. 2007, 16:47

:lol: :lol: :lol:
:lol: :lol: :lol:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 janv. 2007, 16:56

euh... si.... tout à fait..... une méthode...... très justement....... à laquelle il faudrait des parenthères.......... pour passer les arguments quoi........... au lieu de bêtement faire un copier/coller comme il est fort probablement que je le fit pour les mettre à la suite sans me poser plus de question 8-|
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

18 janv. 2007, 17:23

C'est surtout que c'est franchement pas approprié, voire même décevant de la part d'un modérateur tel que toi...
c'est vrai quoi... t'es dans la section javascript après tout ;)
Désolé :oops: Promis je le referais plus 8-|

Me vais te lui préparer un super gros algo en Java moi la prochaine fois :twisted:
PS : Java, pas JavaScript ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer