在上篇文章《bootstrap-table 行内编辑实现》bootstrap-table 行内编辑实现 - 简书 (jianshu.com)
中,采用动态生成一个input控件,再根据点击bootstraptable单元格数据类型来改变input类型,实现行内编辑的效果。在实践中发现,如果是一个下拉列表(字典型数据),当列表项过多时,老式的select使用起来体验不佳,于是改用了select2控件。
$("#tmpInput").select2({
theme: 'bootstrap4',
width: '300px'
});
$("#tmpInput").on("select2:blur", function () { //焦点移开后即认为用户是作好了选择
editConfirm(rowIndex,cellIndex); //保存修改数据函数
});
在实际使用中发现,如果只点击此控件,并立即点击页面其它位置时,select2的失焦事件却并未被触发。
解决的办法是初始化后立即展开这个下拉列表,再使用select2:close事件来模拟失焦
//data1是查询到的字典列表
if(data1.length>10){
$("#tmpInput").select2({
theme: 'bootstrap4',
width: '300px'
}).on("select2:close", function () { //实现blur效果,select2:blur无法触发
editConfirm(rowIndex,cellIndex);
}).select2('open'); //一定要有,当tmpInput被激活时自动展开所有选项
}else {
$("#tmpInput").attr("onblur", "editConfirm(" + rowIndex + "," + cellIndex + " )");
$("#tmpInput").focus();
}