在 rails 中的页面加载时使用多个 true 选项填充 select2 字段
Posted
技术标签:
【中文标题】在 rails 中的页面加载时使用多个 true 选项填充 select2 字段【英文标题】:Populate select2 field with multiple true option on page load in rails 【发布时间】: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
选项显示所有值
任何帮助表示赞赏,在此先感谢
【问题讨论】:
【参考方案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);以上是关于在 rails 中的页面加载时使用多个 true 选项填充 select2 字段的主要内容,如果未能解决你的问题,请参考以下文章
Rails JavaScript 仅在您刷新页面时加载,而不是在原始页面加载时加载,这是怎么回事?
文档准备好后通过 Ajax 加载的 Rails 远程表单未提交