【问题标题】:Populate select2 field with multiple true option on page load in rails在 rails 中的页面加载时使用多个 true 选项填充 select2 字段
【发布时间】:2020-03-16 13:14:07
【问题描述】:

我有一个 Rails 应用程序,我正在尝试使用 jquery select2 添加一个 ruby​​ 选择标记,选择 2 工作得非常好。但我希望如果用户重新访问该页面,它应该向他们显示他们之前选择的值。

这是我的代码

view.html.erb 文件

<% if @select2_values.present? %>
   <%= select_tag "select2_name", options_for_select(@select2_values.map { |obj| [obj[:text], obj[:id]] }), multiple: true, class: "form-control select2", id: "resultOf_select2" %>
<% else %>
   <%= select_tag "select2_name", options_for_select([]), multiple: true, class: "form-control select2", id: "resultOf_select2" %>
 <% end %>

当我将binding.pry 放入 if 语句中时,它会正确地停在那里,而且当我检查控制台时,@select2_values 数组看起来像这样

[{ :id 1, :text "some text" },
 { :id 2, :text "some text" },
 { :id 3, :text "some text" },
]

如果我删除multiple : true 选项,它会正确显示@select2_values 数组的第一个值。有人可以帮我弄清楚如何使用multiple:true 选项显示所有值

任何帮助表示赞赏,在此先感谢

【问题讨论】:

    标签: jquery ruby-on-rails ruby-on-rails-5 jquery-select2


    【解决方案1】:

    首先:您需要将用户选择的值存储在某处...例如 localstorage(因为如果您使用 sessionStorage,这些值将丢失)

    第二:当用户访问您的页面时,尝试获取该用户选择的值...如果有什么则将此值设置为 select2 如下所示:

    $('#mySelect2').val(['1', '2']);

    您可以在此处找到有关本地存储的更多信息:

    https://www.w3schools.com/jsref/obj_storage.asp

    希望对你有帮助

    【讨论】:

    • 我已经将数据存储在数据库中,所以我做了第一步,然后当用户再次访问我的页面时,我在一个 ruby​​ 变量中获得选定的值 @select2_values 这是第二步,然后我尝试按照您在第三步中显示的方式直接使用我的 ruby​​ 变量或创建一个 javascript 变量并将我的 ruby​​ 变量值分配给它,然后设置该值,但两种方式都不起作用
    • 然后在 foreach 中,您可以验证是否选择了一个值...如果选择了值,则将其推送到一个数组,最后在 select2 上设置此值...类似于这样: var selectedValues =新数组(); options_for_select.forEach(opt => { select2_values.forEach(selectedOpt => { if(opt.id == selectedOpt.id){ selectedValues.push(element.text); } }); }); $('#mySelect2').val(selectedValues);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 2013-06-01
    • 2019-10-19
    • 2017-06-25
    • 2016-05-11
    • 2018-05-29
    相关资源
    最近更新 更多