【问题标题】:How to pass parameters to autocomplete_source jquery autocomplete?如何将参数传递给 autocomplete_source jquery 自动完成?
【发布时间】:2015-08-25 20:54:57
【问题描述】:

我正在使用带有 jquery-rails (3.1.0) 和 jquery-ui-rails (4.1.1) gem 的 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 控制器中使用它?

【问题讨论】:

    标签: ruby-on-rails jquery-autocomplete


    【解决方案1】:

    不确定这是否是您要查找的内容,但我一直在努力解决同样的问题,因为我有两个输入字段,我希望在自动完成小部件中加载不同的列表。所以我所做的就是将一个额外的参数传递给自动完成源,如下所示:

    <!-- /_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] 还是通过了!

    【讨论】:

      猜你喜欢
      • 2011-01-08
      • 2017-10-23
      • 2020-12-28
      • 1970-01-01
      • 2015-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多