我正在使用带有jquery-rails(3.1.0)和jquery-ui-rails(4.1.1)gems的Rails 4.0.2。我添加了自动填充,以便根据用户输入的内容和表单中的其他字段进行特定搜索。
表格:
<%= text_field_tag :field , some_value, data: { autocomplete_source: select_path( { :id => @order.Id , :type => @order.type } ) } %>
Form.js:
$('#field').autocomplete
minLength: 0
source: $('#field').attr('data-autocomplete-source')
select: ( event, ui ) ->
$('#pedido_venda_CodTransp').val(ui.item.value)
$('#transportadora_escolhido').val(ui.item.label)
this.form.submit()
false
...
控制器:
def select
# retrieve parameters
id_cliente = params[:id]
retira_entrega = params[:type]
term = params[:term]
# do the query, etc...
end
当我运行代码时,一切正常。控制器接收所有参数并完美运行查询。 但是,参数 type 基于SELECT控件,为了更改它,我将以下代码放在SELECT控件中。
<%= f.select :type, options_for_select( [['RETIRA','R'],['ENTREGA','E']] , @pedido.RetiraEntrega ) ,{}, { :onchange => "change_type();" } %>
JS代码功能:
function change_type()
{
var e = document.getElementById("type");
var option = e.options[ e.selectedIndex ].value;
var field = document.getElementById("field");
var origem = "type=";
source = field.attributes["data-autocomplete-source"].value;
// pesquisa a string retira_entrega=
index = source.search(origem);
field.setAttribute("data-autocomplete-source", source.substring(0,index+origem.length) + String(option));
}
调用JS函数,运行最后一行,设置属性(我在最后检索属性时发出警报)。 问题是控制器永远不会收到更改的值(它总是在创建表单时收到值)。
所以,问题是:如何更改传递给自动完成的参数才能在rails控制器中使用?
答案 0 :(得分:0)
不确定这是否是你想要的,但我正在努力解决同样的问题,因为我有两个输入字段,我希望在自动完成小部件中加载不同的列表。所以我所做的是将一个额外的参数传递给自动完成源,如下所示:
<!-- /_form.html.erb -->
<%= f.text_field :auto1, :size => "100", class: "form-control", data: { autocomplete_source: root_path(:fieldType => "numerouno")} %>
<%= f.text_field :auto2, :size => "100", class: "form-control", data: { autocomplete_source: root_path(:fieldType => "numerodos")} %>
然后在我的控制器中,我使用了额外的参数来确定我需要显示的列表:
if param[:fieldType] == "numerouno"
format.json { render :json => @unoList}
elsif param[:fieldType] == "numerodos"
format.json { render :json => @dosList }
else
flash[:danger] = "Error loading list for autocomplete!"
end
param[:term]
仍然存在!