IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ruby on Rails Discussion :

remplir champ avec Autocomplete


Sujet :

Ruby on Rails

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 93
    Points : 73
    Points
    73
    Par défaut remplir champ avec Autocomplete
    Bonjour tout le monde,

    J'ai essaye de trouve une discussion sur le forum sur le meme sujet mais ca n a pas ete tres fructueux.

    Pourtant je ne pense pas que le probleme soit nouveau.

    Voila dans une vue j'ai plusieurs champs que l'usager doit remplir avec entre autres:
    - nom de produit
    - reference d'achat

    le champ du nom est un "autocomplete". Lorsque l'usager saisit le nom il peut choisir parmis les noms proposes (les references d'achats sont proposees en meme temps afin de differencier les produits ayant le meme nom).

    Ce que j'aimerai et je suis sur que vous me voyez venir

    Lorsque l'utilisateur a choisit j'aimerai que la reference achat se remplisse automatiquement dans le champ de la vue.

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    Bonjour

    Je pense qu'un observe_field sur ton champs nom de produit devrait faire l'affaire (un petit exemple d'utilisation ici : http://pbnaigeon.developpez.com/tuto...cile-RJS/#LV-B )

    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 93
    Points : 73
    Points
    73
    Par défaut
    Bonjour, j'ai bien relu le tutoriel sur l'AJAX, merci et je n'ai pas resolu mon petit probleme mais je voudrais poser une autre question, peut etre que je ne devrais pas le faire sur le meme post.

    En fait si jamais le produit n'existe pas j'aimerais que l'usager choisisse nouveaux produits dans la fenetre de l'autocomplete et que par la suite le browser se redirige vers la vue "new" de reference_achat

    j'ai essaye avec un observe_field mais je pense que je ne dois pas passer les bon parametres ou bien ma synthaxe n'est pas bonne:

    J'ai fait plusieurs essais:

    controller:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    def check_value_name
     
        name = params[:nom]
     
        if name == 'Nouveau produits...'
     
          redirect_to :controller => 'reference_achats', :action => 'new'
     
        end
     
      end
    vue:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <p><label for="pstandard_nom">Nom du standard</label><br/>
    <%= text_field_with_auto_complete :pstandard, :nom  %><br/></p> 
    <div id="refence_achat"></div>	
    <%= observe_field 'pstandard_nom',
    		:url => {:action=>'check_value_name'} %>
    J'ai essaye de m'adapter et de me rediriger vers une autre vue (creation d'une nouvelle reference achat) mais je n'arrive pas a rediriger le browser.

    Bien ca c'etait pour la nouvelle petite question, concernant la question initiale, le probleme que j'ai c'est que dans la fenetre de l'autocomplete, seulement le nom apparait, donc quand l'utilsateur choisit un produit, la reference d'achat n'apparait plus.comment puis je recupere la reference d'achat et ainsi la mettre dans le champ reference achat.

    voici le code lie au l'autocomplete:

    template autocomplete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    <ul>
     
     
    <% for pstandard in @pstandards do -%>
     
        <li>
         <div> <%=h pstandard.nom %> 
       <span class="informal"> ; <%=h pstandard.fournisseur.nom%></span> 
       <span class="informal">; <%=h pstandard.id%></span></div>
         </li>
     
     
    <% end -%>
    <%= content_tag('li', 'Nouveau produits...') %>
    </ul>
    controller:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    def auto_complete_for_pstandard_nom
        @pstandards = auto_complete_responder_for_nom params[:pstandard][:nom]
     
    private
     
      def auto_complete_responder_for_nom (value)
        @pstandards = ReferenceAchat.find( :all, :conditions => [ 'LOWER(nom) LIKE ?', '%' + value.downcase + '%' ])
        render :partial => 'pstandard'
      end
    Merci si jamais cela est trop confus n'hesitez pas a me le dire j'ouvrierai un autre post.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 93
    Points : 73
    Points
    73
    Par défaut
    Bonjour tout le monde,

    Je reviens donc sur mon premier sujet qui correspond a vouloir remplir un champ des que un autre champ a ete rempli.
    Sur les conseils de titoumimi j'ai utilise un observe_field

    mais le probleme c'est que je ne sais pas pour quelle raison mais au lieu de me passer le nom au complet ajax ne me passe que la premiere lettre du coup ma fonction ne marche pas car j'effectue un split sur le nom au complet.

    voici le code que j'ai mis:

    vue:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <p><label for="pstandard_nom">Nom du standard</label><br/>
    <%= text_field_with_auto_complete :pstandard, :nom  %><br/></p> 
     
    <div id='reference'></div>
     
     <%= observe_field "pstandard_nom",
    :url =>{:action=>'verification'},
    :update=>'reference',
    :with => "'nom=' + escape(value)"
    %>
    controller:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def verification
     
        name=params[:nom]
     
        @tab = name.split(';')
        if @tab.length > 1
          render_text "ca marche"
        end
    voila le probleme c'est que params[:nom] est toujours egal a la premiere lettre du nom choisit par l'autocomplete.

    J'espere avoir ete assez clair afin que vous puissiez m'eclairer sur le pourquoi du comment

    merci

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 93
    Points : 73
    Points
    73
    Par défaut
    Rebonjour Forum,

    Petit a petit on devient moins petit

    je viens de comprendre pourquoi je n'avais que la premiere lettre de ma saisie.
    En fait je ne tape que la premiere lettre puis l'autocomplete embarque, je choisis avec la souris le nom qui me convient.
    Mais lorsque l'observe_field fait son boulot, il n'envoie en parametre que ce que j'ai tape (a savoir la premiere lettre) et non ce que j'ai choisi avec l'autocomplete.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <%= observe_field "pstandard_nom",
    :url =>{:action=>'verification'},
    :update=>'reference',
    :with => "'nom=' + escape(value)"
    J'ai verifie si je saisie les deux premieres lettres de mon produit, malgre le choix avec l'autocomplete (qui me marque le nom au complet), l'observe_field n'appelle ma methode 'verification' qu'avec les lettre que j'ai tapees en parametre 'nom'.

    Question: comment faire pour combiner autocomplete et observe_field?

    Si jamais l'observe field n'est pas un bon choix comment recuperer la reference d'achat de mon produit (voir premier message pour explication )?

    Merci d'avance de vos reponses

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 93
    Points : 73
    Points
    73
    Par défaut
    Bonjour Forum, comment ca va ce matin?

    bien apres une grosse journee de recherche j'ai decouvert que certaines options pouvaient s'appliquer sur un observe_field.

    Si jamais j'utilise l'option frequency, evidement il prend bien le nom de mon produit au complet.

    Ce qu'il serait bien ca serait qu'il fasse la requete mais que lorsque l'autocomplete_text n'a plus le focus. Comme ca je serai sur que le nom est saisi au complet.

    Normalement un observe est "setter" sur "change" event. On doit pouvoir le changer sur "blur" event.

    definition observe:

    :on, Specifies which event handler to observe. By default, it's set to "changed" for text fields and text areas and "click" for radio buttons and checkboxes. Use this parameter to change the watched event to whatever you want e.g. "blur", "focus",
    voici le code que j'ai ecrit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <p><label for="pstandard_nom">Nom du standard</label><br/>
    <%= text_field_with_auto_complete :pstandard, :nom  %><br/></p> 
     
    <div id='reference'></div>
     
     <%= observe_field "pstandard_nom",
    :on => 'onblur' ,
    :url =>{:action=>'verification'},
    :update=>'reference',
    :with => "'nom=' + escape(value)"
    %>
    Et pourtant l'observe embarque quand meme lors du changement et non lors de la perte de focus (changement de champ)

    J'ai essaye plusieurs ecritures de "blur" mais rien n'y fait

    Si quelqu'un sait quelque chose sur les observe je suis preneur

    Ou bien si vous connaissez un tutoriel car malgre toutes mes recherches je n'ai pas ressi a les adapter a mon cas.

    Merci d'avance pour les reponses

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Points : 910
    Points
    910
    Par défaut
    Regarde le code généré, soit avec Firebug par exemple, soit tout simplement en faisant afficher le code de la page.

    L'avantage d'un outil comme Firebug est qu'il inclut un débuggeur Javascript. Par contre je ne sais pas si il existe des équivalents pour les autres navigateurs.

    Sinon je pense que l'écriture correcte serait :on => "blur", mais je m'y connais pas plus que ça en RJS malheureusement

    Bon courage


    Edit: Après environ 5 secondes de recherche sur GotAPI, il semblerait que auto_complete_field prenne une option :after_update_element qui est une "Javascript expression that is called when the user has selected one of the proposed values."
    Tu as déjà essayé avec ça ?
    voir http://api.rubyonrails.org/classes/A...r.html#M000577
    Toute la documentation Ruby on Rails : gotapi.com/rubyrails
    Mes articles :
    > HAML : langage de template pour Ruby on Rails

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 93
    Points : 73
    Points
    73
    Par défaut


    Ca y est apres moult recherche j'ai enfin trouve quelquechose qui marche. il semblerait que le probleme soit pas mal connu mais les reponses sont pas assez rares.

    j'ai copier une modification dans le prototype.js. Par contre "blur" ne marche pas mais "focus" fait amplement l'affaire.


    Desole Taum mais j'ai trouve cette solution juste avant que tu ne postes. Je vais quand meme regarder l'option que tu proposes car si je pouvais eviter de modifer prototype.js a chaque fois que j'ai besoin d'un observe_field

    Regarde le code généré, soit avec Firebug par exemple, soit tout simplement en faisant afficher le code de la page.
    j'ai deja essaye ca mais bizarement l'autocomplete ne fonctionne pas sous firefox donc je n'ai pas de choix qui apparait a l'ecran. par contre ca marche tres bien sous IE6 et dans le browser founit par Aptana.
    je pense que je vais fair un nouveau post pour ca

    merci a tout le monde pour vos reponses et a tres bientot c'est sur.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Remplir champs avec DataGridView
    Par kestar dans le forum VB.NET
    Réponses: 2
    Dernier message: 21/02/2012, 14h28
  2. Réponses: 2
    Dernier message: 02/07/2011, 12h39
  3. [MySQL] select avec valeurs existantes et pré-remplir champs avec ces valeurs par défaut
    Par gzg19 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 20/04/2010, 17h52
  4. Réponses: 7
    Dernier message: 14/12/2006, 14h18
  5. comment remplir 2 champs avec une seule listbox
    Par Didi17 dans le forum Access
    Réponses: 3
    Dernier message: 19/10/2005, 09h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo