2012-05-31 2 views
0

Dans mon application Rails (3.1), j'ai un panier dans lequel j'indique le champ de taxe de vente et le total sur une page après que la personne entre dans son état.Remplir dynamiquement le champ jQuery en fonction du champ Rails

Cela fonctionne correctement, sauf en cas d'erreur et que la personne a déjà entré son état. Dans ce cas, la valeur du champ ne change pas (puisque le champ State est déjà rempli), ainsi le jQuery (update_sales_tax) n'est plus déclenché.

Existe-t-il un moyen de restituer la vue (en cas d'erreur) afin que la personne n'ait pas besoin de remplir à nouveau le formulaire entier, mais que la taxe de vente soit encore calculée? Ou peut-être une meilleure approche pour montrer dynamiquement à l'utilisateur leur taxe de vente sur la page (puisque cela dépend de l'État)? En d'autres termes, mon contrôleur fait format.html {render :action => 'new'} s'il y a une erreur dans Commandes # nouveau. Il remplit les champs sous la forme que la personne a déjà saisie, mais il ne recalcule pas la taxe de vente qui est déclenchée sur le champ Changement du: état via jQuery. Comment est-ce que j'obtiens ceci pour recalculer si la vue rend encore et: l'état est déjà rempli?

Dans les commandes # nouvelle vue je:

<%= form_for(@order, :method => :post) do |f| %> 
    <%= f.hidden_field :total_sales_tax, :value => @tax_amount %> 

    <%= f.fields_for :products_shipping do |shipping | %>  
     <%= shipping.select(:state , Order::STATES ,{:prompt => 'Select State'}, :id => "ship_state",:onchange => "update_sales_tax()") %>         
    <% end %>    
<% end %> 

<script> 
    function update_sales_tax(){ 
jQuery.ajax({ 
    url: '/orders/order_update', 
     dataType: 'script', 
    type:'get', 
    data:'stateTo='+jQuery("#ship_state").val() 
    }) 
} 
</script> 

Dans les ordres/order_update.js.erb:

jQuery('#cart_details').html('<%= escape_javascript(render(:partial => @cart)) %>'); 
jQuery('#order_amount').val('<%= format("%.2f", @grand_total) %>'); 
jQuery('#order_total_shipping').val('<%= format("%.2f", @cart.total_shipping) %>'); 
jQuery('#order_total_sales_tax').val('<%= format("%.2f", @tax_amount) %>'); 
+0

Veuillez reformuler votre question. Je ne peux pas comprendre! – beck03076

+0

OK, j'ai ajouté une nouvelle partie "En d'autres termes ..." – yellowreign

+0

Je suis désolé. Laissez-moi deviner ce que vous dites. Disons que vous avez 3 déroulants sélectionner dans un formulaire. Pays, État, Ville. Dites-moi ce que vous voulez avec cet exemple. – beck03076

Répondre

0

j'ai tout compris, je avais juste besoin d'ajouter cette ligne au-dessus de la fonction:

window.onload = update_sales_tax(); 
Questions connexes