在我的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) %>');
答案 0 :(得分:0)
我想通了,我只需要在函数上面添加这一行:
window.onload = update_sales_tax();