繁体   English   中英

使用 JavaScript 在 simple_form 中显示复选框

[英]Using JavaScript to display checkboxes in simple_form

我有一个 simple_form 表单,其中用户 select 通过复选框有多个选项。 但是,由于有很多选项,因此表单中充满了复选框。

我想知道是否有更简洁的方式来显示它。 例如,我正在考虑有一个“蔬菜”和“水果”按钮,然后当您单击它时,会出现一个弹出窗口,您可以在其中 select 复选框。 我想我可以用 JavaScript 做到这一点,但我不确定如何实现代码。

这是我的一些代码示例(使用 Act as Taggable gem)。

<%= f.input:tag_list, label: "Fruit", as: :check_boxes, collection: [ "Apples", "Peaches", "Oranges" ] %>

<%= f.input:tag_list, label: "Vegetables", as: :check_boxes, collection: [ "Potatoes", "Corn", "Broccoli" ] %>

我在考虑使用下拉菜单,但你只能 select 一个。

任何帮助,将不胜感激。

你的问题不清楚。 您希望 JavaScript 显示复选框,最后您想要一个带有多个选择的下拉菜单。

无论如何,我认为您可以使用带有多个 select 选项的下拉菜单

这是一个示例下拉列表,可用于一次 select 多个项目

<select id="cars" multiple>
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="opel">Opel</option>
  <option value="audi">Audi</option>
</select>

查看以下链接以获取有关多个 select 的更多信息以及如何在多次选择 https 后处理表格https://www.w3schools.com/tags/att_select_multiple.asp

我认为您可以使用 javascript 来完成此操作。 在表单中添加一个隐藏字段/模态/弹出代码,添加一个按钮/内联链接,打开该隐藏字段/模态/弹出窗口,它将显示所有选项。

例如:我正在添加一个隐藏字段,您可以添加一个模式/弹出窗口(只要确保它在form中)

<%= simple_form_for ... %>

  // This is shown
  <%= f.input :tag_list, label: "Fruit", as: :check_boxes, collection: [ "Apples", "Peaches", "Oranges" ] %>

  <button class="showFruitsBtn">Show More Fruits</button>

  <div class="hiddenFruits">
    <%= f.input :tag_list, label: "Fruit", as: :check_boxes, collection: [ "Banana", "Mango", "Rest of fruits" ] %>
  </div>

<% end %>

然后在 JS

const showFruitsBtn = document.getElementById('showFruitsBtn');
const hiddenFruits = document.getElementById('hiddenFruits');

hiddenFruits.style.display = "none";

showFruitsBtn.addEventListener('click', () => {
  // Toggle hide
});

如果你使用一些参考/模型/大数组说fruitsArr = ["Apples", "Peaches", "Oranges", "Banana", "Mango", "Rest of fruits"] ,那么你可以做这样的事情:

  // show this initially
  <%= f.input :tag_list, label: "Fruit", as: :check_boxes, collection: fruitsArr.all[0..3] %>

  <button class="showFruitsBtn">Show More Fruits</button>

  <div class="hiddenFruits">
    <%= f.input :tag_list, label: "Fruit", as: :check_boxes, collection: fruitsArr.all[3...] %> // Endless arrays
  </div>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM