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 :

focus sur un champ


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 focus sur un champ
    Bonjour le forum,

    J'aimerai savoir comment faire pour avoir le focus sur un champ en particulier lorsque qu'une vue apparait (avoir le curseur directement dans le champ). Afin que l'utilisateur puisse commencer a remplir le champ sans avoir a cliquer dessus?

    merci pour vos reponses

  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

    Pour donner le focus à un champs, tu peux utiliser du inline RJS :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    = update_page_tag do |page|
      - page['id_de_ton_champs'].focus()
    (version HAML )

    PB
    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 éclairé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 652
    Points
    652
    Par défaut
    Ah ouais pas mal !
    Sinon le classique javascript :
    <body onload="javascript:document.getElementById('id').focus();">
    et j'ai à peine honte de poster ça dans le forum Rails

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 104
    Points : 120
    Points
    120
    Par défaut
    Si possible il vaut mieux éviter d'utiliser le "onload". Par contre j'imagine que Prototype a bien un event du type "document ready", qui se lance quand le DOM est chargé, c'est celui là qu'il faut utiliser (en jQuery c'est $(document).ready())

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 652
    Points
    652
    Par défaut
    Pourquoi il faut éviter le onload ?

    Sinon on doit pouvoir faire un simple script en bas de page (pour éviter "onload") :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <script language="javascript">
    document.getElementById('id').focus();
    </script>
    Mais je reconnais ne pas avoir testé, et il se peut qu'il arrive des cas où le script se lance avant que l'élément cible ne soit encore chargé...

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 652
    Points
    652
    Par défaut
    Voila j'ai trouvé le "Rails Way"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <%= javascript_tag "$('id_du_champ').focus()" %>

  7. #7
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 68
    Points : 61
    Points
    61
    Par défaut
    Merci a toi!
    J'en avais besoin aussi mais la version de mettre le script en javascript en bas de page ne me plaisait pas trop...

  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
    Bonjour tout le monde,
    Peut etre que j'aurais du poster ma question sur le forum de javascript

    J'ai essaye certaines de vos reponses et je n'ai pas de resultats flagrants desole,
    Je pense que je place mal mes appels.
    Grace a SekYo j'ai pense a regarder dans prototype (chose a laquelle je ne pense pas) et j'ai trouve la fonction focusFirstElement qui pourrait faire l'affaire. Apres quelques recherches pour savoir comment la fonction s'appelait j'ai trouve ici que l'on pouvait apparement utiliser "onload" comme Zfred le disait. Ta derniere solution Zfred me parait vraiment cool mais je dois mal la placer car il ne se passe rien.
    Voici comment mes views se presentent.

    Layout:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <head>
      <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
      <title>Gestion des inventaires</title>
      <%= stylesheet_link_tag 'scaffold' %>
      <%= javascript_include_tag :defaults %>
    </head>
    <body>
        <p style="color: green"><%= flash[:notice] %></p>
        <% if logged_in?%>
        <%= @content_for_layout %>
    </body>

    view New
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <h1>New pstandard</h1>
     
     
    <% form_tag :action => 'create' do %>
      <%= render :partial => 'form' %>
      <%= submit_tag "Create" %>
    <% end %>
     
    <%= link_to 'Back', :action => 'list', :etat => 'open' %>
    partial _form
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <!--[form:pstandard]-->
     
    <div id='produit_nom'>
    <p><label>Nom du produit standard</label><br/>
    <%= text_field_with_auto_complete :pstandard, :nom  %><br/></p> </div>
    Je ne sais pas trop ou placer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%= javascript_tag "$('produit_nom').focus()" %>
    J'ai essaye de la mettre a differents endroits mais ca ne change rien.

    Si jamais ca vous parle

  9. #9
    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
    produit_nom, c'est le nom d'un div, pas d'un élément de formulaire

    La notion de focus est donc HS ici.

    Pis le code javascript, je préfère le placer juste avant le /body, au moins je suis sûr que tout ce à quoi je peux faire référence est chargé
    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

  10. #10
    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 j'ai trouve je ne mettais pas le bon nom pour mon champ, il fallait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%= javascript_tag "$('pstandard_nom).focus()" %>
    et non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%= javascript_tag "$('produit_nom').focus()" %>
    merci pour vos reponse

  11. #11
    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
    Citation Envoyé par titoumimi Voir le message
    produit_nom, c'est le nom d'un div, pas d'un élément de formulaire

    La notion de focus est donc HS ici.

    Pis le code javascript, je préfère le placer juste avant le /body, au moins je suis sûr que tout ce à quoi je peux faire référence est chargé
    desole je n'avais pas vu ton post

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 104
    Points : 120
    Points
    120
    Par défaut
    Citation Envoyé par Zfred Voir le message
    Pourquoi il faut éviter le onload ?
    Parce qu'il me semble que le DOM n'est pas encore forcément chargé quand le onload est activé. Donc si tu veux essayer d'accéder à un élément alors que le DOM est pas complètement chargé, pour y mettre le focus, ca peut créer des suprises (bien entendu pour une opération ne souhaitant pas accéder à des éléments du DOM c'est pas génant).
    Surtout que j'imagine que c'est le genre de problèmes plus ou moins aléatoires et merdiques à debugger, donc autant pas se faire chier et "attendre" que le DOM soit chargé complètement

  13. #13
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Points : 652
    Points
    652
    Par défaut
    @SekYo : Oui ok, c'est effectivement le probleme que j'entrevoyais...
    Merci d'avoir pris le temps de répondre

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

Discussions similaires

  1. Forcer le focus sur un champ
    Par egg3774 dans le forum IHM
    Réponses: 7
    Dernier message: 20/03/2007, 13h23
  2. Bloquer le focus sur un champ
    Par Ric21 dans le forum IHM
    Réponses: 9
    Dernier message: 19/03/2007, 17h26
  3. Comment définir un focus sur un champ (ex:login) ?
    Par vandeyy dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 30/01/2007, 11h05
  4. Focus sur un champ de formulaire au chargement de la page
    Par feanor11 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 01/11/2006, 20h43
  5. mettre le focus sur le champ approprié
    Par discogarden dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/07/2005, 16h59

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