Forum: Rails France Mise a jour d'une valeur d'une balise <input> avec ajax

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Renaud Kern (Guest)
on 2006-05-05 18:57
(Received via mailing list)
Bonjour,

Avez-vous deja essayer de mettre a une jour une valeur d'une balise
<input> d'un formulaire a l'aide d'une requete Ajax ? Cela fonctionne
parfaitement avec les balises <div>, <span<, <ul>, <li>,... mais quand
je souhaite que la reponse de XMLHttpRequests mette a jour le "id" d'un
element <input>, je tombe sur un os. Par exemple:

#view:
<%= link_to_remote "cliquez ici", :update='table_champs',
:url=>{:action=>"poll"} %>

<%= start_form_tag :action => 'create' %>

<p><label for="table_champs">une entête</label><br/>
<% text_field :table, :champs %>

<%= submit_tag "Create" %>
<%= end_form_tag %>


#controller:
def poll
  render :text = > "blablabla"
end


L'idee est de mettre a jour la valeur du champs genere par l'instruction
"<% text_field :table, :champs %>", ce qui ne se fait malheureusement
pas.

Par contre, si "text_field" est remplacé par "text_area", sa valeur est
bien mis a jour par la requête ajax.

Est-ce que quelqu'un aurait une explication ?

Renaud
Gerhard L. (Guest)
on 2006-06-08 22:33
Renaud Kern wrote:

> <%= link_to_remote "cliquez ici", :update='table_champs',
> :url=>{:action=>"poll"} %>
> <% text_field :table, :champs %>

C'est exactement mon scénario. J'ai ratté cet après-midi en recherchant
sans aucun success.
Maintenant, j'en ai marre. text_field ne veut pas comme ca, je doit
l'accepter.
La solution que j'utilise maintenant, est comme ca:

<%= link_to_remote "cliquez ici",
        :url=>{:action=>"poll"},
        :success => "document.getElementById('table_champs').value =
request.responseText;" %>
<% text_field :table, :champs %>

Salutation de Munich,
Gerhard
Renaud (Nel) Morvan (Guest)
on 2006-06-09 00:10
(Received via mailing list)
> <%= link_to_remote "cliquez ici", :update='table_champs', :url=>{:action=>"poll"} %>
>
> L'idee est de mettre a jour la valeur du champs genere par l'instruction "<% text_field 
:table, :champs %>", ce qui ne se fait malheureusement pas.
>
> Par contre, si "text_field" est remplacé par "text_area", sa valeur est bien mis a jour 
par la requête ajax.
>
> Est-ce que quelqu'un aurait une explication ?

La raison est simple:

Ajax.Updater est fait pour mettre à jour des contenus de balises avec en
gros innerHTML/outerHTML.

Dans ton cas la valeur que tu veux mettre à jour n'est pas dans ton tag
input mais bien un attribut de ce tag (au contraire d'un li ou d'un
textarea).

Résultat Ajax.Updater ne met pas magiquement à jour les attributs de
balises comme "value" dans ton cas, ou encore "class" d'un élément. Si
tu veux faire ce genre de truc il te faut sortir la panoplie de
scripteur js. Cf la solution proposée.

Nel
Arnaud S. (Guest)
on 2006-06-13 12:36
Gerhard Lausser wrote:
> Renaud Kern wrote:
>
>> <%= link_to_remote "cliquez ici", :update='table_champs',
>> :url=>{:action=>"poll"} %>
>> <% text_field :table, :champs %>
>
> C'est exactement mon scénario. J'ai ratté cet après-midi en recherchant
> sans aucun success.
> Maintenant, j'en ai marre. text_field ne veut pas comme ca, je doit
> l'accepter.
> La solution que j'utilise maintenant, est comme ca:
>
> <%= link_to_remote "cliquez ici",
>         :url=>{:action=>"poll"},
>         :success => "document.getElementById('table_champs').value =
> request.responseText;" %>
> <% text_field :table, :champs %>
>
> Salutation de Munich,
> Gerhard

Je crois que tu peux remplacer document.getElementById('xx') par $('xx')
non?
Ca ne change pas grand chose mais ca raccourci un peu...

<%= link_to_remote "cliquez ici",
        :url=>{:action=>"poll"},
        :success => "$('table_champs').value = request.responseText;" %>
<% text_field :table, :champs %>
This topic is locked and can not be replied to.