Forum: Rails France Affichage automatique de la valeur d'un text_field

Posted by Bardach Mostafa (bardach)
on 2009-06-22 12:11
Bonjour à tous,

Je travail sur appli. de gestion des RH. J'ai une table qui contient 4
colonnes: id, echelle, echelon et indice.
A chaque couple (echelle, echelon) correspond un indice unique:

id...echelle...echelon...indice
1.....11........1.........254
2.....11........2.........352
3.....10........1.........287
.
.
n

Dans un formulaire j'ai deux listes déroulantes (collection_select))
dont l'une pointe sur "echelle" et l'autre sur "echelon" et un
text_field qui pointe sur
le champ "indice".

Question: Comment afficher automatiquement la valeur du champ texte
"indice" lors de la sélection des valeurs dans les deux listes
déroulantes.

Exemple: Lorsque je sélectionne dans mes listes déroulantes echelle=11
et echelon=1, la valeur 254 doit être affichée automatiquement dans le
champ de texte "indice".

Merci pour toute aide.

Bardach@bardach.info
Posted by Fernando Perez (fernando)
on 2009-06-22 14:57
Déjà c'est du javascript. observe_field peut-être?
Posted by Bardach Mostafa (bardach)
on 2009-06-22 15:11
Fernando Perez wrote:
> Déjà c'est du javascript. observe_field peut-être?

J'ai essayé observe_field, mais je ne sais pas comment récupérer la 
valeur du champ "indice" de ma table.

le code suivant affiche la valeur 254 dans mon champ:

<%= f.text_field :indice, Grille.find(:all, :conditions => 'echelle=11 
and echelon=1')[0].indice.to_s %>


Comment écrire un code équivalent dans une fonction js:

<%= observe_field("personne_echelle",
  :on => "changed",
  :frequency => 0.1,
        :function => " code ??? " ) %>
Posted by Michel Belleville (Guest)
on 2009-06-22 15:31
(Received via mailing list)
Prototype est embedded dans Rails, ça simplifie le JavaScript et ça 
tombe
bien parce que c'est ce dont tu as besoin ici :
http://www.prototypejs.org/

Si tu aimes protoype, tu aimeras encore plus jQuery au bout de quelques
temps :
http://docs.jquery.com/Main_Page

Sinon, pour la méthode c'est assez simple :
- sélectionner tes champs <select> et leur attribuer une réponse à
l'évènement "change" : $('id_de_mon_select').observe('change',
function(event) { /* le code à exécuter ici */ });
- dans la méthode de callback, changer la valeur du champs de texte, par
exemple : $('id_de_mon_champs_de_texte').value = $F('id_de_mon_select');

Michel Belleville


2009/6/22 Bardach Mostafa <list-incoming@andreas-s.net>
Posted by Martin Catty (Guest)
on 2009-06-22 15:36
(Received via mailing list)
Michel Belleville a écrit :
> Sinon, pour la méthode c'est assez simple :
> - sélectionner tes champs <select> et leur attribuer une réponse à 
> l'évènement "change" : $('id_de_mon_select').observe('change', 
> function(event) { /* le code à exécuter ici */ });
> - dans la méthode de callback, changer la valeur du champs de texte, par 
> exemple : $('id_de_mon_champs_de_texte').value = $F('id_de_mon_select');

Avec prototype il y a aussi les timed observer [1] pour faire ce genre
de chose qui sont bien pratiques et qui évitent d'avoir à gérer le type
de champ.

[1]: 
http://prototypejs.org/api/timedObserver#method-form.element.observer

--
Martin Catty || fuse
http://www.noremember.org
Posted by Bardach Mostafa (bardach)
on 2009-06-22 15:48
Michel Belleville wrote:
> Prototype est embedded dans Rails, ça simplifie le JavaScript et ça 
> tombe
> bien parce que c'est ce dont tu as besoin ici :
> http://www.prototypejs.org/
> 
> Si tu aimes protoype, tu aimeras encore plus jQuery au bout de quelques
> temps :
> http://docs.jquery.com/Main_Page
> 
> Sinon, pour la méthode c'est assez simple :
> - sélectionner tes champs <select> et leur attribuer une réponse à
> l'évènement "change" : $('id_de_mon_select').observe('change',
> function(event) { /* le code à exécuter ici */ });
> - dans la méthode de callback, changer la valeur du champs de texte, par
> exemple : $('id_de_mon_champs_de_texte').value = $F('id_de_mon_select');
> 
> Michel Belleville
> 
> 
> 2009/6/22 Bardach Mostafa <list-incoming@andreas-s.net>

La valeur de mon champ de texte doit être récupérer de la table.
Commment faire ça en js?
Posted by Martin Catty (Guest)
on 2009-06-22 15:51
(Received via mailing list)
Bardach Mostafa a écrit :

> La valeur de mon champ de texte doit être récupérer de la table.
> Commment faire ça en js?

En Ajax ?

--
Martin Catty || fuse
http://www.noremember.org
Posted by Michel Belleville (Guest)
on 2009-06-22 15:54
(Received via mailing list)
Parcourir la dom, avec prototype ça se fait comme ça : $$('#regle .de
.ciblage .comme .en .css')
http://www.prototypejs.org/api/utility/dollar-dollar

Pour lire le contenu d'un "Element" : ton_element.content()

Tout simple.

Après

Michel Belleville


2009/6/22 Bardach Mostafa <list-incoming@andreas-s.net>
Posted by Michel Belleville (Guest)
on 2009-06-22 15:59
(Received via mailing list)
2009/6/22 Martin Catty <martin@noremember.org>

> de chose qui sont bien pratiques et qui évitent d'avoir à gérer le type
> de champ.


En quoi un timed observer est-il plus simple qu'un observe('change', ... 
)
avec callback ? Encore avec un champs de texte ou autre (où il n'y a pas
moyen de le faire de toute façon) je comprend que ça ait une utilité, 
mais
sur un select ça me semble un poil overkill perso, d'autant que le
timedobserver réagira forcément moins vite (il ne s'exécute que tous les
tantième de seconde) et va plomber la machine (par exemple si le 
tantième de
secondes est petit, et si le nombre d'éléments à surveiller est grand).

Michel Belleville
Posted by Martin Catty (Guest)
on 2009-06-22 16:06
(Received via mailing list)
Michel Belleville a écrit :

> En quoi un timed observer est-il plus simple qu'un observe('change', ... 
> ) avec callback ? 

Non ce n'est pas plus simple, juste une autre façon de faire qui pourra
lui servir.

--
Martin Catty || fuse
http://www.noremember.org
Posted by Bardach Mostafa (bardach)
on 2009-06-22 16:29
Précisions SVP: Quelles fonctions ajax puis-je utiliser pour afficher la 
valeur de l'indice qui correspond à un couple (echelle, echelon)?
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.