在 Rails 3 中,我使用的是 jQuery Tokenize 插件,但表单提交的是值,而不是 id

Posted

技术标签:

【中文标题】在 Rails 3 中,我使用的是 jQuery Tokenize 插件,但表单提交的是值,而不是 id【英文标题】:In Rails 3, I'm using the jQuery Tokenize plugin but the form submits the value, not the id 【发布时间】:2011-06-07 19:49:00 【问题描述】:

我喜欢this 插件,我在 php 中轻松使用过这个插件,但我现在在 Rails 3 中尝试,由于某种原因,当表单被提交时,它没有提交所选项目的 id,而是提交实际值。我什至打印出 JSON 以确保数据被正确地输入到输入字段并且它显示了 ID 和 VALUE。

关于为什么会发生这种情况的任何想法。我一直在想,也许我需要为 onBlur 添加一个自定义 javascript 调用,但在此之前我从来没有这样做过。任何人有任何其他建议,甚至是完全不同的方式来在 Rails 中完成多项选择的自动完成?

感谢您能给我的任何帮助,谢谢!!是的,我知道输入没有被清理:)

  def autocomplete
    autolist = []
    sql = "SELECT id,username from users WHERE username LIKE '" + params[:q] + "%'"
    result = ActiveRecord::Base.connection.execute(sql)
    result.each  |field| autolist.push( "id" => field[0], "name" => field[1] ) 
    render :json => autolist, :layout => false
  end

表格代码:

<% form_for @message, :url => user_messages_path(@user), :html =>  :multipart => true  do |f| %>
    <tr>
        <% if @reply_to.nil? %>
        <td ><p class="labels">To:</p></td>
        <td><%= f.text_field :to %>
            <%= error_message_on @message, :to %></td>
        <% else %>
      <td >To: <%= @message.to %><%= f.hidden_field :to, :value => @message.to  %></td>
        <% end %>
    </tr>
  <tr>
    <% if @reply_to.nil? %>
    <td ><p class="labels">Patient:</p></td>
    <td><%= f.collection_select :patient_id, Patient.find_all_by_user_id(current_user), :id, :last_name %>
        <%= error_message_on @message, :patient_id %></td>
    <% else %>
    <td >Patient: <%= Patient.find(@message.patient_id).last_name %><%= f.hidden_field :patient_id, :value => @message.patient_id  %></td>
    <% end %>
  </tr>
  <tr>
    <% if @reply_to.nil? %>
    <td ><p class="labels">Subject:</p></td>
    <td><%= f.text_field :subject %>
    <%= error_message_on @message, :subject %></td>
    <% else %>
    <td >Subject: <%= @message.subject %><%= f.hidden_field :subject, :value => @message.subject  %></td>
    <% end %>
  </tr>
  <tr>
      <td  valign="top"><p class="labels">Message:</p></td>
      <td><%= f.text_area :body %>
            <%= error_message_on @message, :body %></td>
  </tr>
  <tr>
      <td  valign="top"><p class="labels">Attachment:</p></td>
      <td><%= f.file_field :attachment %><%= error_message_on @message, :attachment %></td>
  </tr>
  <tr>
      <td colspan="2"><%= submit_tag "Send" %></td>
  </tr>
</table>

Javascript

<script language="javascript">
$(function($) 
    $("#message_to").tokenInput("/users/1/friends/autocomplete", 
                hintText: "Type in the name of a colleague",
                noResultsText: "No results",
                searchingText: "Searching..."
            );
);
</script>

【问题讨论】:

我们不应该查看表单的代码吗? 当然 - pastie.org/1452530 你能发布你的相关 javascript 吗? 刚刚发布了 dmarkow - 对此感到抱歉 【参考方案1】:

您的文本字段和隐藏字段需要不同的名称。

【讨论】:

隐藏字段和文本字段是什么意思?您指的是哪些字段? 您有一个 f.text_field :to 和一个 f.hidden_field :to -- 两者都使用相同的 id。但是,由于这些是在单独的 if/else 条件下,所以这应该不是问题。

以上是关于在 Rails 3 中,我使用的是 jQuery Tokenize 插件,但表单提交的是值,而不是 id的主要内容,如果未能解决你的问题,请参考以下文章

如何在rails 3.1中使用jquery-addresspicker jquery

在没有咖啡脚本的 Rails 3.2 中使用 javascript

使用 COCOON Rails 3 在动态字段中自动完成 Jquery

如何在 Rails 6.0.3.3 中使用 jQuery?

Rails 3.2.1 Jquery 自动完成

如何使用 JSON 和 jQuery 在 Rails 2.3.5 中显示服务器错误