当文本框与rails中的模型的ID号匹配时,尝试检查特定的复选框

时间:2013-03-18 14:41:56

标签: javascript ruby-on-rails ruby ruby-on-rails-3 coffeescript

我有以下三个表:

StudentRegister和名为Student_Register的联接表。 enter image description here

为了便于理解,以下是每个模型:

class Register < ActiveRecord::Base
  has_many :student_registers
  has_many :students, :through => :student_registers
  belongs_to :event
  attr_accessible :date, :student_ids, :module_class_id, :event_id
end

class Student < ActiveRecord::Base
  has_many :student_registers
  has_many :registers, :through => :student_registers
  attr_accessible :first_name, :last_name, :university_id
end

class StudentRegister < ActiveRecord::Base
  belongs_to :register
  belongs_to :student
  attr_accessible :present, :register_id, :student_id, :time_of_arrival
  default_scope :order => 'present DESC'
end

所以我现在要做的是使用Register控制器打开某个寄存器并在register/1/registration页面上标记该寄存器。这很好。不过我现在所拥有的是以下内容: enter image description here 每个复选框都附有一个提交按钮,但是我使用:style => 'display: none'隐藏了它。以下代码可能会让您更好地了解正在发生的事情:

register/registration.html.erb

<table border="1">
  <%= text_field_tag 'Card_ID',nil,  :autofocus => true %>
      <tr><td>Present</td>
        <td>University ID</td>
    <td>First Name</td>
        <td>Last Name</td>
        <td>Time of Arrival</td>
      </tr>
  <tr>
  <% @studentregister.each do |t| %>
<%= simple_form_for t do |streg| %>
      <td><div class="present"><%= streg.check_box :present, :onChange => "submit()"%>  </div>
        <%= streg.submit :style => 'display: none' %></td>
            <td><%= streg.label Student.find(t.student_id).university_id %></td>
            <td><%= streg.label Student.find(t.student_id).first_name %></td>
            <td><%= streg.label Student.find(t.student_id).last_name %></td>
            <% if t.time_of_arrival %>
            <td><%= streg.label t.time_of_arrival.strftime('%H:%M:%S%P')%></td>
                <% else %>
            <td><%= streg.label " "%></td>
                <% end %>
             </tr>
    <% end %>
    <% end %>
</table>

该页面的来源如下:

enter image description here

我想做的是以下内容:

当放入文本框的文本与学生的University ID之一匹配时,我希望选中相应的复选框,理论上,一旦检查完毕,它的表单就会自动提交并且'嘿presto',它的形式得到更新。

这是我目前的JS / Coffeescript代码:

registers.js.coffee

$("input[name=Card_ID]").keyup ->
  if @value.length > 3
    $("input[name=\"student_register[present]\"]").prop "checked", true
  else
    $("input[name=\"student_register[present]\"]").prop "checked", false

我知道这段代码没有做我想做的事情,主要是因为我的JS / Coffeescript知识是0,但也因为我只是想检查文本框的长度大于3时是否有效它应该检查一个/所有复选框(不知道这个代码会检查什么,因为它不是很清楚,而且复选框是相同的),但它不起作用。

我甚至不知道如何使用Ruby代码搜索University ID并将其与学生匹配。我现在真的很困惑,现在已经三天了。

1 个答案:

答案 0 :(得分:0)

我正试图让你的问题围绕着巨型尺寸描述O_O。如果我做得对,你想要这样的东西:

表单有id属性,请使用它。看一下HTML的结构:

# Each 'student_register' form has an id "edit_student_register_#{id}"
# where id is the object's id
# Inside each of these forms there is a check box with name "student_register[present]"

<form id="edit_student_register_15">
  <input name="student_register[present]"/>
</form>

# So you need to get that input with a selector like this:
$("input[name=Card_ID]").keyup (e)->
  if e.wich is 13 # If enter key is pressed...
    id = this.text # To interpolate in the selector below
    $("form#student_register_#{id} input[name='student_register[present]']").attr 'checked', true

在浏览器控制台中进行游戏,检查选择器的显示内容。