根据Rails字段动态填充jQuery字段

时间:2012-05-31 20:31:42

标签: ruby-on-rails ruby-on-rails-3 jquery

在我的Rails(3.1)应用程序中,我有一个购物车,我在该人员进入他们的州后显示销售税字段和页面上的总数。

它正常工作,除非出现错误且此人已进入其状态。在这种情况下,字段值不会更改(因为已经填充了State字段),因此不会再次触发jQuery(update_sales_tax)。

有没有办法再次渲染视图(如果出现错误),那么此人不需要再次填写整个表单,但仍计算销售税?或者也许是一种更好的方法来动态地向用户显示他们的销售税(因为它取决于州)?

换句话说,如果订单#new中出现错误,我的控制器会执行此操作format.html {render :action => 'new'}。它以人员已输入的形式填充字段,但不会重新计算通过jQuery在:state字段的更改中触发的销售税。如果视图再次呈现并且:状态是否已填充?如何重新计算?

在Orders#new view中我有:

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

在orders / 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) %>');

1 个答案:

答案 0 :(得分:0)

我想通了,我只需要在函数上面添加这一行:

window.onload = update_sales_tax();