[英]How to make a input field visible when a button is clicked or create the same field when a button is clicked for ruby on rails
Rails新手在這里。
這是我目前的表格
<%= f.input :campaign_name , :input_html => {:style=> 'width: 300px'} %>
<%= f.input :date_range, :input_html => {:style=> 'width: 300px'}%>
<%= f.label :first_event %>
<%= f.collection_select :first_event, eventNames, :to_s, :to_s, include_blank: true %>
<br><br><br>
<%= f.label :second_event %>
<%= f.collection_select :second_event, eventNames, :to_s, :to_s, include_blank: true%>
我想要的是,當用戶單擊“添加過濾器”時,我希望另一個字段以與集合select相同的eventNames數組彈出。我試圖創建另一個按鈕並獲取其標簽,如果不是提交按鈕及其添加,過濾器按鈕呈現另一種形式。
但這對於界面和用戶體驗來說是非常糟糕的。
我希望我的用戶能夠隨時刪除第二個事件字段,而不必提交表單。
所以我需要在其中添加另一個按鈕以刪除新創建的可見表單。
我怎樣才能做到這一點
正如我在我的評論中所說,如果您限制用戶只能添加一個過濾器或說固定數量的過濾器,那么您可以通過js簡單地顯示和隱藏您的集合。 您的表單將具有隱藏的收藏夾列表
<%= f.input :campaign_name , :input_html => {:style=> 'width: 300px'} %>
<%= f.input :date_range, :input_html => {:style=> 'width: 300px'}%>
<%= f.label :first_event %>
<%= f.collection_select :first_event, eventNames, :to_s, :to_s, include_blank: true %>
<br><br><br>
<%= f.label :second_event %>
<%= f.collection_select :second_event, eventNames, :to_s, :to_s, include_blank: true%>
<%= f.label :third_event, class: "hidden" %>
<%= f.collection_select :third_event, eventNames, :to_s, :to_s, include_blank: true, class: "hidden"%>
隱藏CSS的收藏
.hidden{display: none;}
並在用戶單擊添加過濾器時通過js顯示它,並假設它是您可以執行的鏈接:
= link_to "Add Filter", "#", id: "add-filter"
$(document).on("click","#add-filter", function(e){
$(".hidden").show();
e.preventDefault();
});
如果用戶可以添加多個過濾器,那么您需要通過ajax添加它們。 對於ajax,請遵循以下步驟:
一種。 為您的操作創建自定義路線:
post "/filter" => "your_controller#add_filter", as: "filter"
灣 創建用於添加過濾器的鏈接:
<%= link_to "Add Filter", filter_path, id: "add-filter", data: {event_id: "2", url: filter_path}%>
C。 通過js獲取event_id並發送ajax請求:
$(document).on("click","#add-filter".function(e){
var eventId = $(this).data("eventId");
var url = $(this).data("url");
$.ajax({
type: "POST",
url: url,
data: {id: eventId}
});
})
d。 在控制器中創建add_filter動作:
def add_filter
@event_id = params[:id]
respond_to do |format|
format.js
end
end
即 創建您的新集合,並通過js將其附加到app / views / your_controller / add_filter.js.erb文件中
var label = "<%=j label_tag "#{@event_id.humanize}_event" %>"
var collection = "<%=j collection_select(:resource, "#{@event_id.humanize}_event".to_sym , eventNames, :to_s, :to_s, include_blank: true) %>"
$("#form_id").find("select").last().after(label).after(collection);
$("#add-filter").data("eventId","<%=j @event_id + 1 %>");
您必須使用humanize
或number_and_words
來將number_and_words
轉換為單詞格式,並且還必須相應地更改:resource
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.