Javascript 如何通过jQuery发送选定元素和文本输入

Javascript 如何通过jQuery发送选定元素和文本输入,javascript,jquery,ruby-on-rails,ruby,ruby-on-rails-4,Javascript,Jquery,Ruby On Rails,Ruby,Ruby On Rails 4,我的应用程序实现了实时搜索,并且工作正常。我遇到的问题是,现在我有一个包含很多列的表,我想搜索所有元素。我只希望有一个文本输入和一个下拉列表来选择我要搜索的列 可搜索模块 人事管理员 输入文本按预期返回,但对象_列中没有任何内容。例如,当我键入单词n时,我的服务器终端返回以下消息: Started GET "/people?&search=n&_=1463081307356" for 127.0.0.1 at 2016-05-12 16:28:34 -0300 Processin

我的应用程序实现了实时搜索,并且工作正常。我遇到的问题是,现在我有一个包含很多列的表,我想搜索所有元素。我只希望有一个文本输入和一个下拉列表来选择我要搜索的列

可搜索模块

人事管理员

输入文本按预期返回,但对象_列中没有任何内容。例如,当我键入单词n时,我的服务器终端返回以下消息:

Started GET "/people?&search=n&_=1463081307356" for 127.0.0.1 at 2016-05-12 16:28:34 -0300
Processing by PeopleController#index as JS
  Parameters: {"search"=>"n", "_"=>"1463081307356"}
编辑:

后来我有了一个想法,做了一些改变。我给表单一个ID并用它来做请求,现在我可以同时拥有信息列名和搜索记录。现在唯一的问题是路径,它返回一个URI错误

搜索引擎

在搜索方法中,返回值始终为all。您确实希望返回值是它正上方的三元运算符的结果。去掉最后一个,你就可以走了

module ClassMethods
  def search_for(present_column,record)
    record.present? ? where(present_column+' LIKE ?', record+"%") : all
    # all  <== this should be removed
  end
end
实际的Ajax调用已更改为:

删除搜索输入字段上未定义的操作属性 显式引用URL以发送请求 为ajax调用创建哈希参数 删除不必要的序列化调用
这还将在列选择的更改事件上安装一个处理程序,从而重构对单独函数的Ajax调用。

不太了解def search\u forpresent\u列,record方法,返回值的用途是什么?您正在对服务器执行两个$get请求。你能评论一下你发送$'search'的那一行吗?你看到服务器的GET请求了吗?对不起,这是一个测试,它被从真实代码中删除了,我忘了从这里删除,没有它,就无法工作either@Leito当我删除$'search'请求时,返回的列名如下:Started GET/name?object_columns=name&=1463142917053 for 127.0.0.1,2016-05-13 09:35:22-0300So,现在我可以得到列名和搜索字段,但不能同时得到,一次只能得到一个,当按下一个键时,如何同时得到这两个字段?对不起,这都是一个测试,它从真实代码中删除了,我忘了从这里删除,没有它,也不起作用…@RaventheBard我更新了javascript代码,所以你可能想试试。我能够让它在我的测试应用程序中正常工作。
<%= form_tag do %>
  <% valid_column_names = target.column_names.reject{|r| r == "created_at" || r == "updated_at" || r == "slug"} %>
  <%= select_tag :object_columns, options_for_select(valid_column_names) %>
  <%= text_field_tag :search, '', autocomplete: :off %>
<% end %>
$(function () {
    $("input#search").keyup(function () {
        $.get($("#object_columns option:selected").text(), $("#object_columns").serialize(), null, "script");
        $.get($("#search").attr("action"), $("#search").serialize(), null, "script");
    });
});
Started GET "/people?&search=n&_=1463081307356" for 127.0.0.1 at 2016-05-12 16:28:34 -0300
Processing by PeopleController#index as JS
  Parameters: {"search"=>"n", "_"=>"1463081307356"}
<%= form_tag people_path, class: "form_id" do %>
  <% valid_column_names = target.column_names.reject{|r| r == "created_at" || r == "updated_at" || r == "slug"} %>
  <%= select_tag :object_columns, options_for_select(valid_column_names) %>
  <%= text_field_tag :search, '', autocomplete: :off %>
<% end %>
$(function () {
    $("input#search").keyup(function () {
        $.get($(".form_id"), $(".form_id").serialize(), null, "script");null, "script");
    });
});
module ClassMethods
  def search_for(present_column,record)
    record.present? ? where(present_column+' LIKE ?', record+"%") : all
    # all  <== this should be removed
  end
end
$(function () {
    function search() {
        $.get("/search", { column_name: $("select#column_name").val(), search: $("#search").val() }, null, "script");
    };

    $("select#column_name").change(search); 
    $("input#search").keyup(search);
});