# Formulaire en popup?

**URL:** <https://www.ruby-forum.com/t/formulaire-en-popup/171802>\
**Category:** FR\
**Created:** [July 9, 2009, 1:58pm UTC](https://www.ruby-forum.com/t/formulaire-en-popup/171802 "2009-07-09T13:58:52Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![korn900](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/5daacb/32.png) [@korn900](https://www.ruby-forum.com/u/korn900)\
**Post date:** [July 9, 2009, 1:58pm UTC](https://www.ruby-forum.com/t/formulaire-en-popup/171802/1 "2009-07-09T13:58:52Z")

</div>

Bonjour,

J’ai le dilemne suivant :

J’ai un formulaire “nouvelle personne”, dans ce formulaire on doit  
choisir la commune de cette personne ( lien vers la table COMMUNES)  
via un select contenant le nom de toutes les communes de la base  
Je voudrai offrir à l’utilisateur de créer cette commune si elle  
n’existe pas, je pourrai mettre un div caché et le faire apparaitre en  
ajax avec un lien “ajouter une commune” mais le formulaire pour  
ajouter une commune est grand alors ca va vite devenir moche…  
J’aimerai plutôt qu’une fenetre s’ouvre avec le formulaire et que  
lorsque l’utilisateur valide le formulaire, la fenetre se ferme, et la  
nouvelle commune soit sélectionné dans le select du formulaire  
personne.

Ma question : comment faire ca ? Je pensai à lightwindow mais je n’ai  
pas trouvé beaucoup de documentation pour faire ca avec rails et ca à  
l’air buggé (pas d’autocomplétion). Une fenêtre popup ? Ca peut être  
bien mais c’est un peu moche maintenant les popup avec le web 2.0,  
non ? Une autre idée ? Des avis ?

Merci à tous  
adrien

---

<div class="post-metadata">

**Author:** ![korn900](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/5daacb/32.png) [@korn900](https://www.ruby-forum.com/u/korn900)\
**Post date:** [July 9, 2009, 2:19pm UTC](https://www.ruby-forum.com/t/formulaire-en-popup/171802/2 "2009-07-09T14:19:54Z")

</div>

Avec un bon framework JavaScript (jQuery) il y a des plugins tout fait,  
mais  
en gros ils marchent tous comme Ã§a :

1. crÃ©er un Ã©lÃ©ment html (div c’est bien) Ã la racine de ton document
  - le positionner en “absolute” en haut Ã gauche du doc
  - lui donner un z-index css plus haut que tout le monde dans le  
doc
  - lui mettre un fond noir et lui donner de la transparence (cf.  
ton  
framework JS)
  - lui donner un waiter gif animÃ© qui signifie que tu charge et  
qu’il  
faut que l’utilisateur patiente

2. faire un call ajax pour rÃ©cupÃ©rer juste ton formulaire (pas de  
layout)

- le coller Ã l’arrivÃ©e dans ton nouvel Ã©lÃ©ment
  - lui coller l’action ajax pour crÃ©er le nouvel Ã©lÃ©ment en submit

Si tu maÃ®trise bien les CSS et le javascript, c’est trivial. Sinon, il y  
a  
souvent des plugins tout prÃªts pour ton framework JS (enfin, en jQuery  
you  
il y en a).

Michel B.

2009/7/9 Adrien C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![korn900](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/5daacb/32.png) [@korn900](https://www.ruby-forum.com/u/korn900)\
**Post date:** [July 11, 2009, 8:24am UTC](https://www.ruby-forum.com/t/formulaire-en-popup/171802/3 "2009-07-11T08:24:23Z")

</div>

C’est exactement ca que je veux faire, malheuresement je ne maitrise  
pas le javascript ! Quelqu’un peut-il m’indiquer de la documentation  
( même en anglais ) pour réaliser ca, malgrè mes recherches je ne  
trouve pas grand chose :S  
Merci pour votre réponse  
Adrien

On Jul 9, 2:18 pm, Michel B. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![korn900](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/5daacb/32.png) [@korn900](https://www.ruby-forum.com/u/korn900)\
**Post date:** [July 12, 2009, 12:13pm UTC](https://www.ruby-forum.com/t/formulaire-en-popup/171802/4 "2009-07-12T12:13:20Z")

</div>

D’accord, je vais me mettre à JQuery, ca a l’air très intéressant !  
surtout avec la librairie UI !  
Par contre je rencontre maintenant mon premier problème, j’avais une  
requete ajax qui surveillait un formulaire mais depuis que j’ai  
installé jquery, elle ne marche plus :

\<%= observe\_form :new\_personne,  
:url =\> { :action =\> ‘doublon’ },  
:frequency =\> 2,  
:update =\> ‘doublon’  
%\>

Et selon le résultat de l’action “doublon” j’affichais, ou pas, le div  
suivant :

\<%= render :partial =\> 'list\_doublon' %\>

Une idée ?

Merci

Adrien

On Jul 11, 9:59 pm, Michel B. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![korn900](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/5daacb/32.png) [@korn900](https://www.ruby-forum.com/u/korn900)\
**Post date:** [July 11, 2009, 10:00pm UTC](https://www.ruby-forum.com/t/formulaire-en-popup/171802/5 "2009-07-11T22:00:30Z")

</div>

[http://jquery.com/](http://jquery.com/) pour jQuery, ce n’est intÃ©grÃ© dans Rails (mais c’est  
intÃ©grable, sans grave problÃ¨mes) perso je te le recommande, si tu n’as  
aucune expÃ©rience de JavaScript

Sinon, dans rails de base, tu as prototype / scriptaculous qui peut  
faire  
les mÃªmes choses (mais en moins joli, en moins bien Ã mon sens).

Comme tu dois tout prendre le JS depuis le dÃ©but, commence par jQuery, Ã  
mon  
sens c’est l’avenir.

Sinon, pour les conseils pour dÃ©buter, n’hÃ©site pas Ã demander, la JS  
c’est  
mon dada.

Michel B.

2009/7/11 Adrien C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![korn900](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/5daacb/32.png) [@korn900](https://www.ruby-forum.com/u/korn900)\
**Post date:** [July 12, 2009, 3:08pm UTC](https://www.ruby-forum.com/t/formulaire-en-popup/171802/6 "2009-07-12T15:08:35Z")

</div>

Merci beaucoup pour toutes ces explications, je me décide bien pour  
faire du jquery ( à moins que je me rende compte que c’est beaucoup  
plus de travail ) !  
En fait j’ai mal posé ma question, j’avais compris que mon code  
n’étais pas compatible jquery et je ne souhaite plus utiliser  
scriptaculous. Ce que je voulais savoir c’est comment faire ca en  
jquery ?  
Pour l’instant j’essaye juste de faire ca :

mais malheuresement rien ne se produit lorsque je change la valeur  
d’un champ du formulaire ( même résultat si je remplace $  
(‘new\_personne’) par $(‘#personne\_nom’) qui est l’id d’un input du  
formulaire. Comment puis-je faire ca ? D’après mes recherches sur le  
net c’est bien la propriété change qu’il faut utiliser de cette  
manière :S ?

Je me demande également comment organiser mes fichiers pour jquery  
dans rails ? Ou places-tu les .js ? Correspondent-t-ils chacun à une  
vue ?

Adrien

On Jul 12, 1:04 pm, Michel B. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![korn900](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/5daacb/32.png) [@korn900](https://www.ruby-forum.com/u/korn900)\
**Post date:** [July 12, 2009, 1:05pm UTC](https://www.ruby-forum.com/t/formulaire-en-popup/171802/7 "2009-07-12T13:05:56Z")

</div>

LÃ tu viens de rencontrer un truc que je n’aime pas trop dans Rails : le  
fait de ne pas savoir que tu faisais de l’AJAX, avec prototype /  
scriptaculous “masquÃ©” par du ruby.

Prototype est la library javascript de base qu’utilise Rails.  
Scriptaculous  
est une surcouche de prototype qui fait de l’animation Ã l’Ã©cran, inclu  
de  
base aussi dans Rails. Prototype utilise pour sÃ©lectionner un Ã©lÃ©ment de  
ta  
page (et lui ajouter des possibilitÃ©s) par son id la mÃ©thode _$()_. Or,  
jQuery utilise aussi la mÃ©thode _$()_, mais pour faire beaucoup plus  
(sÃ©lectionner une liste d’Ã©lÃ©ment par sÃ©lecteur css, liste que tu peux  
manipuler Ã la volÃ©e avec des itÃ©rateurs ; transformer un tableau ou un  
hash  
javascript simple _[]_, ou _{}_ en un itÃ©rateur jQuery, renvoyer une  
version  
Ã©tendue du document, etc.). Donc quand tu charge les deux libraries, tu  
as  
un conflit, la derniÃ¨re dÃ©cidant de ce que l’on fait de la mÃ©thode  
_$()_.  
Heureusement, les braves gens de jQuery ont prÃ©vu le et assoupli le  
fonctionnement pour Ãªtre compatible :  
[http://docs.jquery.com/Using\_jQuery\_with\_Other\_Libraries](http://docs.jquery.com/Using_jQuery_with_Other_Libraries)

Sinon, je t’encourage Ã voir ce qu’a rÃ©ellement gÃ©nÃ©rÃ© le code Rhtml :  
\<%= observe\_form :new\_personne,  
:url =\> { :action =\> ‘doublon’ },  
:frequency =\> 2,  
:update =\> ‘doublon’  
%\>

Tu vas t’apercevoir qu’en fait c’est du JavaScript prototype, Ã©crit  
directement dans la page. Personnellement je trouve Ã§a moche, du  
javascript  
dans du code HTML (philosophie Rails : on ne doit pas taper son  
javascript  
soi-mÃªme, c’est le boulot du rjs, un seul langage =\> ruby), je prÃ©fÃ¨re  
des  
fichiers javascript .js Ã cÃ´tÃ© qui manipulent la page pour faire le  
boulot  
(philosohpie jQuery : pour bien dÃ©grader une application, il faut  
qu’elle ne  
repose pas sur du javascript et des “hacks” html mais plutÃ´t sur un code  
html simple et propre, et le JavaScript doit Ãªtre dans son fichier, et  
faire  
le boulot pour ajouter les Ã©lÃ©ments d’interface dont il a besoin).  
Chaque  
philosophie Ã ses avantages / inconvÃ©nients :

1. Rails
  - Avantages
    - intÃ©grÃ© dans Rails “de base”
    - remote\_form\_for, link\_to\_remote sont sÃ©duisants

  - InconvÃ©nients
    - incite Ã oublier le JavaScript, donc te laisse dÃ©pourvu le  
jour  
oÃ¹ tu veux faire quelque chose de diffÃ©rent de ce qui est  
possible en RJS
    - incite Ã faire des vues avec du code JavaScript, ce qui n’est  
pas  
bon pour la rÃ©utilisation (la vue cible ne “connaÃ®t” pas le  
contexte de la  
source, les scripts de rÃ©action Ã la rÃ©ception de la cible  
sont bien mieux  
placÃ©s dans le contexte de la source)
    - verbeux
    - un poil plus lent que jQuery (Ã§a se sent surtout si tu ne  
fais  
pas de bubbling avec des longues listes, ou si tu fais  
beaucoup d’animations  
compliquÃ©es)

    1. jQuery + ce que tu veux cÃ´tÃ© serveur (dont Rails)

  - Avantages
    - rend les manipulations de la dom “magiquement facile” Ã  
condition  
de maÃ®triser les sÃ©lecteurs CSS
    - Ã©lÃ©gant et peu verbeux
    - incite Ã concevoir des interfaces qui “dÃ©gradent” bien  
(marchent  
sans JavaScript, mÃªme si c’est moins pratique, Ã§a fait plaisir  
Ã des  
configurations sans JS)
    - incite Ã mieux comprendre et connaÃ®tre le HTML propre et les  
CSS
    - InconvÃ©nients
    - pas inclu “de base” dans Rails (mais facile Ã installer)
    - complique un peu si tu veux faire du rjs (mais c’est limite  
pas  
propre)

VoilÃ , j’espÃ¨re que Ã§a t’aidera Ã faire ton choix et Ã avancer. Si tu  
veux  
d’autres tips jQuery, n’hÃ©site pas Ã demander, mais Ã§a ne t’exempte pas  
de  
lire la doc…

Michel B.

2009/7/12 Adrien C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![korn900](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/5daacb/32.png) [@korn900](https://www.ruby-forum.com/u/korn900)\
**Post date:** [July 12, 2009, 6:34pm UTC](https://www.ruby-forum.com/t/formulaire-en-popup/171802/8 "2009-07-12T18:34:15Z")

</div>

Pour le faire dans les fichiers JS, rien de plus simple, mais il est bon  
de  
comprendre un peu la philosophie de jQuery.

jQuery cherche Ã faire du non-obtrusif, pour Ã§a, il vaut mieux lui  
simplifier le travail en faisant du code HTML propre et simple (oublier  
les  
remote\_form\_for etc., faire du form\_for tout simple).

Pour mettre Ã§a dans un fichier, il faut juste :

- poser to code javascript dans /public/javascript/ et l’appeller en  
.js,  
si possible un fichier par utilisation
- utiliser la “magie” jQuery pour lancer le JavaScript quand le  
document  
html est complÃ¨tement chargÃ©, Ã§a se fait comme expliquÃ© dans les  
tutoriaux  
avec $(document).load(function() { /\* ton code ici \*/ })
- charger ton fichier javascript comme normalement en Rails : \<%=  
javascript\_tag ‘ton\_script.js’ %\>

Quelques conseils pour te simplifier le boulot :

- pour Ã©viter de multiplier les attributions de callbacks aux  
Ã©lÃ©ments  
chargÃ©s en AJAX et pour ne pas charger inutilement le PC client de  
mÃ©thodes  
multiples attribuÃ©es Ã plein d’Ã©lÃ©ments, faire du bubbling sur un  
Ã©lÃ©ment  
inamovible parent :  
[Ender - Real Estate Technology - Property Management Software](http://www.ender.com/2008/04/event-bubbling-in-javascript.html) pour  
comprendre le concept, [http://docs.jquery.com/Events](http://docs.jquery.com/Events) pour plus de  
dÃ©tails  
sur la gestion d’Ã©vÃ¨nements par jQuery
- dÃ©coupe tes fichiers de scripts par fonctionalitÃ©, Ã©vite de les  
sÃ©parer  
par vue
- plutÃ´t que de changer les propriÃ©tÃ©s de style Ã la main, il vaut  
mieux  
le faire en attribuant des classes et en Ã©crivant des fichiers css  
propres  
pour ces classes
- ne jamais oublier : un id c’est unique, une classes c’est autant de  
fois que tu veux, et plusieurs par Ã©lÃ©ments Ã§a marche trÃ¨s bien
- pour afficher les rÃ©sultats, deux solutions :
  - charger un petit bout de html gÃ©nÃ©rÃ© en rÃ©ponse au format.js et  
le  
coller tel quel (gÃ©nÃ©ralement le partiel), c’est bien pour faire  
vite mais  
c’est moins bien pour Ã©voluer ensuite (mon conseil, commence par  
Ã§a) et  
traiter un avec un callback de la mÃ©thode AJAX, ou utiliser la  
mÃ©thode  
$.load().
  - envoyer une rÃ©ponse en XML ou JSON, la lire et effectuer les  
rÃ©sultats en construisant du HTML avec jQuery, c’est un peu plus  
long au  
dÃ©but, mais Ã§a te fait faire du webservice mÃªme sans le savoir,  
c’est plus  
lÃ©ger pour le serveur et c’est plus souple

Michel B.

---

<div class="post-metadata">

**Author:** ![korn900](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/5daacb/32.png) [@korn900](https://www.ruby-forum.com/u/korn900)\
**Post date:** [July 12, 2009, 3:13pm UTC](https://www.ruby-forum.com/t/formulaire-en-popup/171802/9 "2009-07-12T15:13:51Z")

</div>

Désolé, question stupide, j’essaye depuis quelques heures et j’avais  
juste une erreur de syntaxe…

Il reste ma question sur les fichiers js, pour l’instant je l’insère  
dans le html… :S

Bon je m’attaque maintenant au AJAX pour chercher comment faire pour  
afficher le partiel (ou non) selon les résultats d’une requête en  
fonction des données dans le formulaire… au travail !
