javascript - Bootstrap Table 的X-editable插件怎么用
问题描述
在准备使用X-editable来做Bootstrap Table 的行内编辑的时候,根据http://www.cnblogs.com/landea... 的文章,我不能将全部效果重复实现,网上也搜索了其他资料,大都是单独使用X-editable的,我需要是结合Bootstrap Table来实现行内编辑的。
其中单元格的text的普通编辑,是可以做到。但是下拉框却不行。截图看到的下拉框我是用Table的field.formatter强行添加的<select>. 并没有达到理想的效果。
代码:
//引用部分
//css
<link href="/lib/Bootstrap/3.3.7-dist/css/bootstrap.min.css" rel="stylesheet">
<link href="/lib/Bootstrap/BootstrapTable/bootstrap-table.css" rel="stylesheet">
<link href="/lib/Bootstrap/BootstrapTable/x-editable/bootstrap-editable.css" rel="stylesheet">
//js
<script src="/lib/jquery/jquery-3.1.1.min.js"></script>
<script src="/lib/Bootstrap/3.3.7-dist/js/bootstrap.min.js"></script>
<script src="/lib/Bootstrap/BootstrapTable/bootstrap-table.js"></script>
<script src="/lib/Bootstrap/BootstrapTable/x-editable/bootstrap-editable.js"></script>
<script src="/lib/Bootstrap/bootstrap-treeview/js/bootstrap-treeview.js"></script>
<script src="/lib/Bootstrap/datapicker/bootstrap-datepicker.js"></script>
//HTML
<body>
<div id="familInfo">
</div>
</body>
//js
$('#familTable').bootstrapTable({
editable: false,//开启编辑模式
toolbar: '#tbar_famil',
search: true,
showColumns: true, // 开启自定义列显示功能
dataType: 'json',
striped: true,
sidePagination: 'server',//设置为服务器端分页
pagination: true,
pageList: [10, 25, 50, 100],
columns: [{ checkbox: true },
{ field: 'id', title: 'ID', visible: false },
{ field: 'isMember', title: '是否会员' },
{
field: 'name', title: '名称',
formatter:function(value,row,index){
var strHtml ='<a class="editable editable-click">'+ value +'</a>';
return strHtml;
}
},
{ field: 'relationShip', title: '关系' ,
formatter:function(value,row,index){
// $(this).editable();
//var strHtml ='<a class="editable editable-click" data-relationship>'+ value/*row.actionName*/ +'</a>';
var strHtml ='<select class="show-tick" id="relationShip"><option value="夫妻">夫妻</option><option value="父女">父女</option></select>'
return strHtml;
}
},
{ field: 'gender', title: '性别',
formatter:function(value,row,index){
// $(this).editable();
//var strHtml ='<a class="editable editable-click" data-relationship>'+ value/*row.actionName*/ +'</a>';
var strHtml ='<select class="show-tick " id="relationShip"><option value="男">男</option><option value="女">女</option></select>'
return strHtml;
}
},
{ field: 'idcard', title: '身份证',
formatter:function(value,row,index){
var strHtml ='<a class="editable editable-click">'+ value +'</a>';
return strHtml;
}
},
{ field: 'birthday', title: '生日' ,
formatter:function(value,row,index){
var strHtml ='<a class="editable editable-click">'+ value +'</a>';
return strHtml;
}
},
{ field: 'mobilePhone', title: '手机' ,
formatter:function(value,row,index){
var strHtml ='<a class="editable editable-click">'+ value +'</a>';
return strHtml;
}
},
{ field: 'nativePlace', title: '籍贯' },
{ field: 'party', title: '政治面貌' },
{ field: 'nation', title: '国籍' },
{ field: 'nationality', title: '民族' }
],
onEditableHidden: function(field, row, $el, reason) { // 当编辑状态被隐藏时触发
if(reason === 'save') {
var $td = $el.closest('tr').children();
$td.eq(-1).html((row.price*row.number).toFixed(2));
$el.closest('tr').next().find('.editable').editable('show'); //编辑状态向下一行移动
} else if(reason === 'nochange') {
$el.closest('tr').next().find('.editable').editable('show');
}
},
onClickRow: function (row, tr) {
// memberID = row.id;
}
});
//新增家庭成员
$('#btn_addFamil').on('click', function () {
$('#familTable').bootstrapTable('insertRow', { index: 0, row: { name: '测试' ,relationShip:'',mobilePhone:'',idcard:''} });
});
$.fn.editable.defaults.mode = 'inline'; //行内进行编辑.
$.fn.editable.defaults.showbuttons = false; //不显示按钮组.
$.fn.editable.defaults.onblur ="submit"; //当焦点离开时以提交处理,默认是取消.
//点击单元格既进行编辑
$('#familTable').on( 'click', 'td:has(.editable)', function (e) {
e.stopPropagation(); // 阻止事件的冒泡行为
$(this).find('.editable').editable('show'); // 打开被点击单元格的编辑状态
} );
我的问题:
如何完整的使用X-editable,我只是试出来了input的,其他下拉,时间等具体该怎么用?
我发现editable的text是能在界面上反应,但是用Table的getDate 获取数据时,这个修改的数据并不直接反应在data里,是什么回事,如何实现编辑后数据提交到data里?
希望得到各位的帮助,有源码的最好,不然给出具体的资料、思路也可。
时间也比较久了,不过我正好百度搜到你这个问题,我也刚好在做这个,所以说一下吧
我和你参考的文档是一样的,可能题主比较心急吧,看的不是很仔细,bootstrap有一个扩展叫做bootstrap-table-editable.js我看到你在js部分没有引入到这个文件,可能是没注意.
引入了bootstrap-table-editable.js之后,就可以直接在实例化表格的时候,给columns参数中需要用到的列直接加参数就可以声明出我们想要的效果了
<script src="/Public/admin/x-editable/bootstrap-table-editable.js"></script>
<script>
//下面的代码截取的一小部分
//列设置
columns:[
{checkbox:true,valign:'middle',width:'50px'},
{
field:'Number',title:'序号',align:'center',valign:'middle',width:'50px',
formatter:function(value,row,index){
return index + 1;
}
},
{field:'cid',title:'分类',align:'center',valign:'middle',width:'100px',editable:{
type:'select',
title:'分类',
source:[{value:"10001",text:"研发部"},{value:"10002",text:"销售部"},{value:"10003",text:"行政部"}]
}},
{field:'comment',title:'内容',align:'left',valign:'middle',editable:{
type:'text',
title:'修改评论',
disabled:false, //是否禁用编辑
emptytext:"请输入评论内容", //空值的默认文本
mode:"popup", //编辑框的模式:支持popup和inline两种模式,默认是popup""
validate:function(value){ //字段验证
if(! $.trim(value)){
return '不能为空';
}
}
}}
],
//编辑时触发
onEditableSave: function (field, row, oldValue, $el) {
$table.bootstrapTable("resetView");
$.ajax({
type: "post",
url: "/Editable/Edit",
data: row,
dataType: 'JSON',
success: function (data, status) {
if (status == "success") {
alert('提交数据成功');
}
},
error: function () {
alert('编辑失败');
},
complete: function () {
}
});
},
</script>
比如我刚刚在columns中的cid和comment两个字段,直接就可以声明出自己想要的效果
而且不再像单独声明x-editable时一样,需要每一个都给写一个实例化的方法,使用了bootstrap-table-editable.js之后,可以统一在onEditableSave事件中进行处理
bootstrap-table-editable.js 的地址是 https://github.com/vitalets/x... 希望可以帮到题主
这篇关于javascript - Bootstrap Table 的X-editable插件怎么用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!