Mise a jour d'une valeur d'une balise <input> avec ajax


#1

Bonjour,

Avez-vous deja essayer de mettre a une jour une valeur d’une balise
d’un formulaire a l’aide d’une requete Ajax ? Cela fonctionne
parfaitement avec les balises

, <span<,
    ,
  • ,… mais quand
    je souhaite que la reponse de XMLHttpRequests mette a jour le “id” d’un
    element , je tombe sur un os. Par exemple:

    #view:
    <%= link_to_remote “cliquez ici”, :update=‘table_champs’,
    :url=>{:action=>“poll”} %>

    <%= start_form_tag :action => ‘create’ %>

    une entête
    <% 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


#2

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


#3

<%= 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


#4

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 %>