Rails应用中Select2无法识别jQuery配置的multiple:true属性问题
解决Rails中Select2多选配置不生效的问题
问题核心是Select2的multiple: true配置依赖原生<select>标签的multiple属性,仅在JS里设置不会生效,必须先让原生元素具备多选能力。
两种可行方案
方案一:在Rails表单输入中直接添加multiple属性
修改你的ERB表单代码,在input_html里明确指定multiple: true,让Rails生成带多选属性的select标签:
= f.input :tag_ids, collection: [], input_html: { class: "js-example-basic-multiple js-example-responsive", id: "js-customer", multiple: true # 新增这一行 }, include_blank: false
这样生成的原生select标签会带有multiple="multiple"属性,此时JS里的multiple: true配置就能正常触发多选功能,表单提交时也能正确传递多值数组。
方案二:通过JS动态添加multiple属性后初始化Select2
如果不想修改Rails代码,可先给DOM元素添加多选属性,再初始化Select2:
// 先给select元素添加multiple属性,再初始化Select2 $("#js-customer").attr('multiple', 'multiple').select2({ maximumSelectionLength: 5, minimumInputLength: 1, multiple: true, tags: true, data: <%= Tag.order(:name).map{|tag| {id: tag.id, text: tag.name}}.to_json.html_safe %> });
注意:原JS代码中data部分的多余括号已移除,确保ERB渲染的JSON格式正确。
关键说明
Select2是基于原生表单元素的增强插件,它的多选功能必须依托原生<select>的multiple属性。如果原生元素没有该属性,即使JS配置里设置multiple: true,插件也无法启用多选模式,这是插件的设计逻辑决定的。
内容的提问来源于stack exchange,提问作者Samuel D.
相关产品推荐
相关产品推荐

