前言

对比网上的例子
比如以下这种数据不是Empty的例子,但是是由于在html中写死了数据(awesome),不适合动态添加。
<a href="#" rel="external nofollow" id="username" data-type="text" data-pk="1">awesome</a>
<script>
$(function(){
$('#username').editable({
url: '/post',
title: 'Enter username'
});
});
</script>
另外一种就是使用bootstrap table动态添加的,但是select类型就会出现数据为Empty的情况。
$('#db_dependences').bootstrapTable({
method:'POST',
dataType:'json',
contentType: "application/x-www-form-urlencoded",
cache: false,
striped: true, //是否显示行间隔色
sidePagination: "client", //分页方式:client客户端分页,server服务端分页(*)
showColumns:true,
pagination:true,
minimumCountColumns:2,
pageNumber:1, //初始化加载第一页,默认第一页
pageSize: 10, //每页的记录行数(*)
pageList: [10, 15, 20, 25], //可供选择的每页的行数(*)
uniqueId: "id", //每一行的唯一标识,一般为主键列
showExport: true,
exportDataType: 'all',
exportTypes:[ 'csv', 'txt', 'sql', 'doc', 'excel', 'xlsx', 'pdf'], //导出文件类型
onEditableSave: function (field, row, oldValue, $el) {
$.ajax({
success: function (data, status) {
if (status == "success") {
alert("编辑成功");
}
},
error: function () {
alert("Error");
},
complete: function () {
}
});
},
data: [{
id: 1,
name: '张三',
sex: '男',
time: '2017-08-09'
}, {
id: 2,
name: '王五',
sex: '女',
time: '2017-08-09'
}, {
id: 3,
name: '李四',
sex: '男',
time: '2017-08-09'
}, {
id: 4,
name: '杨朝来',
sex: '男',
time: '2017-08-09'
}, {
id: 5,
name: '蒋平',
sex: '男',
time: '2017-08-09'
}, {
id: 6,
name: '唐灿华',
sex: '男',
time: '2017-08-09'
}],
columns: [{
field: 'id',
title: '序号'
}, {
field: 'name',
title: '姓名',
editable: {
type: 'text',
validate: function (value) {
if ($.trim(value) == '') {
return '姓名不能为空!';
}
}
}
}, {
field: 'sex',
title: '性别',
editable: {
type: 'select',
pk: 1,
source: [
{value: 1, text: '男'},
{value: 2, text: '女'},
]
}
}, {
field: 'time',
title: '时间',
editable: {
type: 'date',
format: 'yyyy-mm-dd',
viewformat: 'yyyy-mm-dd',
datepicker: {
weekStart: 1
}
}
}]
});
结果图如下:
由于开源,很快就找到原因,由于formatter我们没有写这个function导致调用的默认的formatter,默认的没有把表格的值传入html中,bootstrap-table-editable.js源码如下,初始定义_dont_edit_formatter为false,我们没有实现noeditFormatter的function就会执行第二个if语句,其中的标签中没有对内容赋值,导致最后显示结果为它默认的Empty:
column.formatter = function(value, row, index) {
var result = column._formatter ? column._formatter(value, row, index) : value;
$.each(column, processDataOptions);
$.each(editableOptions, function(key, value) {
editableDataMarkup.push(' ' + key + '="' + value + '"');
});
var _dont_edit_formatter = false;
if (column.editable.hasOwnProperty('noeditFormatter')) {
_dont_edit_formatter = column.editable.noeditFormatter(value, row, index);
}
if (_dont_edit_formatter === false) {
return ['<a href="javascript:void(0)" rel="external nofollow" rel="external nofollow" rel="external nofollow" ',
' data-name="' + column.field + '"',
' data-pk="' + row[that.options.idField] + '"',
' data-value="' + result + '"',
editableDataMarkup.join(''),
'>' + '</a>'
].join('');
} else {
return _dont_edit_formatter;
}
};
由于要实现多样式,则把上面的代码改变,并在使用的时候实现noeditFormatter:function(value){…}就是了。将上面的代码改为如下(此为我自己改的,你可以根据自己的需要做修改):
column.formatter = function(value, row, index) {
var result = column._formatter ? column._formatter(value, row, index) : value;
$.each(column, processDataOptions);
$.each(editableOptions, function(key, value) {
editableDataMarkup.push(' ' + key + '="' + value + '"');
});
var _dont_edit_formatter = false;
if (column.editable.hasOwnProperty('noeditFormatter')) {
var process = column.editable.noeditFormatter(value, row, index);
if(!process.hasOwnProperty('class')){
process.class = '';
}
if(!process.hasOwnProperty('style')){
process.style = '';
}
_dont_edit_formatter = ['<a href="javascript:void(0)" rel="external nofollow" rel="external nofollow" rel="external nofollow" ',
' data-name="'+process.filed+'"',
' data-pk="1"',
' data-value="' + process.value + '"',
' class="'+process.class+'" style="'+process.style+'"',
'>' + process.value + '</a>'
].join('');
}
if (_dont_edit_formatter === false) {
return ['<a href="javascript:void(0)" rel="external nofollow" rel="external nofollow" rel="external nofollow" ',
' data-name="' + column.field + '"',
' data-pk="' + row[that.options.idField] + '"',
' data-value="' + result + '"',
editableDataMarkup.join(''),
'>' + value + '</a>'
].join('');
} else {
return _dont_edit_formatter;
}
};
结果如下:
然后是bootstrap table的使用js文件,在其中实现noeditFormatter函数。返回的result必须包含filed和value,class和style可以不需要,class可以额外用其它插件之类,比如badge,style是增加样式(背景,颜色,字体等)。
$('#db_dependences').bootstrapTable({
method:'POST',
dataType:'json',
contentType: "application/x-www-form-urlencoded",
cache: false,
striped: true, //是否显示行间隔色
sidePagination: "client", //分页方式:client客户端分页,server服务端分页(*)
showColumns:true,
pagination:true,
minimumCountColumns:2,
pageNumber:1, //初始化加载第一页,默认第一页
pageSize: 10, //每页的记录行数(*)
pageList: [10, 15, 20, 25], //可供选择的每页的行数(*)
uniqueId: "id", //每一行的唯一标识,一般为主键列
showExport: true,
exportDataType: 'all',
exportTypes:[ 'csv', 'txt', 'sql', 'doc', 'excel', 'xlsx', 'pdf'], //导出文件类型
onEditableSave: function (field, row, oldValue, $el) {
$.ajax({
success: function (data, status) {
if (status == "success") {
alert("编辑成功");
}
},
error: function () {
alert("Error");
},
complete: function () {
}
});
},
// 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');
// }
// },
data: [{
id: 1,
name: '张三',
sex: '男',
time: '2017-08-09'
}, {
id: 2,
name: '王五',
sex: '女',
time: '2017-08-09'
}, {
id: 3,
name: '李四',
sex: '男',
time: '2017-08-09'
}, {
id: 4,
name: '杨朝来',
sex: '男',
time: '2017-08-09'
}, {
id: 5,
name: '蒋平',
sex: '男',
time: '2017-08-09'
}, {
id: 6,
name: '唐灿华',
sex: '男',
time: '2017-08-09'
}, {
id: 7,
name: '马达',
sex: '男',
time: '2017-08-09'
}, {
id: 8,
name: '赵小雪',
sex: '女',
time: '2017-08-09'
}, {
id: 9,
name: '薛文泉',
sex: '男',
time: '2017-08-09'
}, {
id: 10,
name: '丁建',
sex: '男',
time: '2017-08-09'
}, {
id: 11,
name: '王丽',
sex: '女',
time: '2017-08-09'
}],
columns: [{
field: 'id',
title: '序号'
}, {
field: 'name',
title: '姓名',
editable: {
type: 'text',
validate: function (value) {
if ($.trim(value) == '') {
return '姓名不能为空!';
}
}
}
}, {
field: 'sex',
title: '性别',
editable: {
type: 'select',
pk: 1,
source: [
{value: 1, text: '男'},
{value: 2, text: '女'},
],
noeditFormatter: function (value,row,index) {
var result={filed:"sex",value:value,class:"badge",style:"background:#333;padding:5px 10px;"};
return result;
}
}
}, {
field: 'time',
title: '时间',
editable: {
type: 'date',
format: 'yyyy-mm-dd',
viewformat: 'yyyy-mm-dd',
datepicker: {
weekStart: 1
},
noeditFormatter: function (value,row,index) {
var result={filed:"time",value:value,class:"badge",style:"background:#333;padding:5px 10px;"};
return result;
}
}
}]
});
关于bootstrap table的导出及使用可以看我另外一篇博客。
下载和引用
下载x-editable,并如下引用。
<link href="js/bootstrap_above/x-editable-develop/dist/bootstrap-editable/css/bootstrap-editable.css" rel="external nofollow" rel="stylesheet"> <script src="js/bootstrap_above/x-editable-develop/dist/bootstrap-editable/js/bootstrap-editable.js"></script> <script src="js/bootstrap_above/bootstrap-table-develop/dist/extensions/editable/bootstrap-table-editable.js"></script>
然后讲上诉的一些文件修改添加,就完成了。
另外项目的结果展示
其中的样式都是自行在x-editable的基础上添加的。如配置出问题,以下是源码链接。
源码下载
总结
以上所述是小编给大家介绍的bootstrap table实现x-editable的行单元格编辑及解决数据Empty和支持多样式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# bootstrap
# table
# x-editable
# 行单元格编辑
# bootstrap table合并行数据并居中对齐效果
# Bootstrap实现的表格合并单元格示例
# bootstrap table单元格新增行并编辑
# bootstrap table实现单击单元格可编辑功能
# bootstrap table实现合并单元格效果
# 分页
# 都是
# 每页
# 就会
# 第一页
# 单元格
# 自己的
# 行数
# 行间
# 给大家
# 小编
# 官网
# 服务端
# 可供选择
# 为空
# 主键
# 客户端
# 李四
# 加载
# 王五
相关文章:
高性价比服务器租赁——企业级配置与24小时运维服务
如何在云主机上快速搭建多站点网站?
高防服务器租用指南:配置选择与快速部署攻略
如何在云指建站中生成FTP站点?
如何选择CMS系统实现快速建站与SEO优化?
单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?
学校免费自助建站系统:智能生成+拖拽设计+多端适配
如何在IIS管理器中快速创建并配置网站?
建站主机选哪种环境更利于SEO优化?
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
网站设计制作公司地址,网站建设比较好的公司都有哪些?
建站之星如何优化SEO以实现高效排名?
如何使用Golang table-driven基准测试_多组数据测量函数效率
建站主机功能解析:服务器选择与快速搭建指南
黑客如何利用漏洞与弱口令入侵网站服务器?
广州顶尖建站服务:企业官网建设与SEO优化一体化方案
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
定制建站策划方案_专业建站与网站建设方案一站式指南
建站之星展会模版如何一键下载生成?
临沂网站制作企业,临沂第三中学官方网站?
C++中引用和指针有什么区别?(代码说明)
如何在阿里云通过域名搭建网站?
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
建站之星代理平台如何选择最佳方案?
c# 在高并发场景下,委托和接口调用的性能对比
Bpmn 2.0的XML文件怎么画流程图
制作企业网站建设方案,怎样建设一个公司网站?
Swift中循环语句中的转移语句 break 和 continue
如何用IIS7快速搭建并优化网站站点?
建站与域名管理如何高效结合?
,想在网上投简历,哪几个网站比较好?
洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
招商网站制作流程,网站招商广告语?
广东企业建站网站优化与SEO营销核心策略指南
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
香港服务器网站推广:SEO优化与外贸独立站搭建策略
C#怎么创建控制台应用 C# Console App项目创建方法
广平建站公司哪家专业可靠?如何选择?
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
如何选择适配移动端的WAP自助建站平台?
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
深圳网站制作培训,深圳哪些招聘网站比较好?
,sp开头的版面叫什么?
,怎么用自己头像做动态表情包?
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
测试制作网站有哪些,测试性取向的权威测试或者网站?
如何解决VPS建站LNMP环境配置常见问题?
Python文件管理规范_工程实践说明【指导】
*请认真填写需求信息,我们会在24小时内与您取得联系。