六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 48|回复: 0

动态的增加auto_complete

[复制链接]

升级  31.33%

25

主题

25

主题

25

主题

秀才

Rank: 2

积分
97
 楼主| 发表于 2013-1-29 11:49:39 | 显示全部楼层 |阅读模式
http://www.iteye.com/problems/35097
以前问的一个问题,今天遇到一个同样的情况,解决了.把代码贴出来,纪念下.
解决起来其实也是比较简单的,用后台来增加auto_complete的partial,动态生成一个id,每个id不同就可以.
controller
  # add_purchase_tax,增加purchase_tax  def add_purchase_tax    @purchase_order_marketing = PurchaseOrderMarketing.find_by_id(params[:purchase_order_marketing_id])    render :update do |page|      page.insert_html :before,        :total,        :partial => '/purchase_invoices/purchase_tax',        :locals => {:purchase_tax => PurchaseTax.new(:category => 'NewTax',:add => 'plus'),:time => Time.now.to_f}    end  end
help
  def fields_for_purchase_tax(purchase_tax,time, &block)    if purchase_tax.new_record?      fields_for("purchase_order_marketing[new_purchase_tax_attributes][#{time}]", purchase_tax, &block)    else      fields_for("purchase_order_marketing[existing_purchase_tax_attributes][]", purchase_tax, &block)    end  end
js
function add_purchase_tax(purchase_order_marketing_id){    new Ajax.Request('/purchase_taxes/add_purchase_tax',{        method: 'get',        parameters: 'purchase_order_marketing_id='+purchase_order_marketing_id,        evalScripts:true    })}function remove_tax(){    if($$('tr.newtax').size() > 0){        var old_value = Number($$('tr.newtax').last().down('span').innerHTML);        $$('tr.newtax').last().remove();        var total = $('total_value');        total.innerHTML = Math.round((Number(total.innerHTML) - old_value)*100)/100;        $$('input[id$=total]').first().value = total.innerHTML    };}
html
<% form_remote_for :purchase_order_marketing,  :url => save_purchase_order_marketing_url(@purchase_order_marketing),  :html => { :method => 'post' },  :complete => "Effect.Appear($('csuccess'));setTimeout(\"Effect.Fade($('csuccess'));\",2500);",  :failure => "error" do |f| %>        <%= render :partial => 'purchase_tax' ,:collection => @purchase_order_marketing.purchase_taxes %>        <tr style="height:20px;">          <td>            <input type="button" value="Add" />            <input type="button" value="Remove" />          </td>
_purchase_tax
<% time ||= Time.now.to_f %><% fields_for_purchase_tax(purchase_tax,time) do |purchase_tax_form| %>  <% prefix = purchase_tax.new_record? ? "new_#{time}" : "existing_#{purchase_tax.id}" %>      <td class="tax">        Tax & Duties      </td>      <td>        <%= purchase_tax_form.select :add,PurchaseTax.default_categories,{},{:onchange => 'change_tax(this);'} %>        <%= auto_complete_for_client(prefix, "payee",nil,{:width => '70px',:source => PurchaseOrder.default_tax_duties,:fields => [:name],:onblur => 'change_purchase_tax(this);'}) %>        <%= purchase_tax_form.text_field :rate,{:size => 3,:onchange => 'change_tax2(this);',:readonly => 'readonly'} %> %        <%= purchase_tax_form.hidden_field :tax_duty_id %>        <%= purchase_tax_form.hidden_field :tax_duty_name %>      </td>      <td>        <span id="<%= prefix %>_span"><%= (@purchase_order_marketing.sub_total)*purchase_tax.rate/100 %></span> <%= @purchase_order_marketing.uom %>      </td>
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表