2017-08-07 71 views
0

在視圖中,我遍歷一個集合併爲每個集合填充各種信息。對於此集合中的每個值都有一個下拉菜單,我想根據選擇填入特定的div。具有未知ID的對象的Javascript偵聽器

<% @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類,但我不能100%相信這是如何工作的。有什麼建議麼?如果不明確,我可以進一步闡述。

回答

0

我認爲你要碰到的第一個問題是你將有多個div s和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" %> 

使您optiondata-sample-id,你必須div s的獨特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。

+0

謝謝你的糾正。我試圖給我一個更通用的例子,我把它留下了,我的道歉。所以我不是最流利的rails或javascript ...添加'data-sample-id'給了我正確的id,以便在任何選項被選中時調用div的div。我還沒有完全遵循如何創建一個可能的x數量的變化的聽衆。 – thatdude99

+0

你使用JQuery嗎?還是普通的JS? – jvillian

+0

JQuery。 「額外的文字達到極限......」 – thatdude99

相關問題