我在 rails 表单上使用select2 jQuery 插件来对多选字段进行自动完成。如果页面上没有验证错误,一切正常。如果存在验证错误(与此元素无关),则 javascript 部分将获取一个空元素并在 JSON.parse 调用上失败。
但是使用 chrome-tools 检查显示表单数据在服务下具有正确的信息
services:[{"id":93,"text":"Old School"},{"id":94,"text":"Gels"}],93,94
这是视图片段
<%= f.label :services, "Services" %>
<input name="services" type='hidden' id='services' data-values='<%= @services %>' value='<%= @selected_services %>' style="width: 100%"/>
Javascript 看起来像这样。
var initSel = function (element, callback) {
console.log("intiSel data BRFORE json parse", $(element).val());
try {
var data = JSON.parse($(element).val());
callback(data);
console.log("intiSel data AFTER json parse", data);
} catch (e) {
console.error("Parsing error:", e);
}
}
$(function() {
$("#services").select2({
initSelection: initSel,
createSearchChoice: function(term, data) {
if ( $(data).filter(function() {
return this.text.localeCompare(term)===0;
}).length===0) {return {id:term, text:term};}
},
multiple: true,
data: function (){
var data = $('#services').data('values');
return {results:data};
}
});
});