在视图中,我遍历一个集合并为每个集合填写各种信息。对于此集合中的每个值,都有一个下拉菜单,我希望根据选择填写特定的div。
<% @model.samples.each do |sample| %>
<div class="top">
<%=fields_for 'asample[]', sample, do |a_form| %>
Dropdown: <%=a_form.select..........{id: "ex#{sample.id}"} %>
</div>
<div id="hold_partial>
<%= render partial: "/folder/dropdown_based_partial" %>
我理解如何定期执行此操作,我不知道如何为样本中的每个可能样本获取唯一的侦听器。一个建议是一个抽象的js课程,但我并不完全有信心这是如何工作的。有什么建议?如果不清楚,我可以进一步阐述。
答案 0 :(得分:0)
我认为您遇到的第一个问题是您将div
多个id="hold_partial"
。 (顺便说一句,"
结尾处您遗失"hold_partial
。
现在,您可以执行以下操作:
<% @model.samples.each do |sample| %>
<div class="top">
<%=fields_for 'asample[]', sample, do |a_form| %>
Dropdown: <%=a_form.select..........{id: "ex#{sample.id}", 'data-sample-id': sample.id} %>
</div>
<div id="hold-partial-#{sample.id}">
<%= render partial: "/folder/dropdown_based_partial" %>
这样,您的option
拥有data-sample-id
,并且div
具有唯一id
个,您可以根据options.data(sampleId)
定位{。}}。
然后,您可以将.on 'change'
事件定位为:
$('select').on('change', function (e) {
var targetPartial = $("#hold-partial-" + e.currentTarget.data('sampleId'));
// do some fantastic stuff with your targeted partial
})
有几件事:
e.currentTarget
会为您提供生成change
事件的元素。从那里,.data('sampleId')
将为您提供在循环中分配的id
。HTH。