前言

对比网上的例子
比如以下这种数据不是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实现合并单元格效果
# 分页
# 都是
# 每页
# 就会
# 第一页
# 单元格
# 自己的
# 行数
# 行间
# 给大家
# 小编
# 官网
# 服务端
# 可供选择
# 为空
# 主键
# 客户端
# 李四
# 加载
# 王五
相关文章:
昆明网站制作哪家好,昆明公租房申请网上登录入口?
唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?
如何快速辨别茅台真假?关键步骤解析
建站主机选购指南:核心配置优化与品牌推荐方案
非常酷的网站设计制作软件,酷培ai教育官方网站?
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
北京网站制作的公司有哪些,北京白云观官方网站?
如何用VPS主机快速搭建个人网站?
建站之星免费版是否永久可用?
做企业网站制作流程,企业网站制作基本流程有哪些?
如何快速搭建高效可靠的建站解决方案?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
如何用5美元大硬盘VPS安全高效搭建个人网站?
建站之星收费标准详解:套餐费用及年费价格表一览
如何快速启动建站代理加盟业务?
建站之星展会模版如何一键下载生成?
如何快速上传建站程序避免常见错误?
h5在线制作网站电脑版下载,h5网页制作软件?
如何用PHP工具快速搭建高效网站?
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
如何用wdcp快速搭建高效网站?
如何在阿里云购买域名并搭建网站?
网站制作知乎推荐,想做自己的网站用什么工具比较好?
如何快速生成橙子建站落地页链接?
如何在阿里云部署织梦网站?
香港服务器部署网站为何提示未备案?
建站之星代理商如何保障技术支持与售后服务?
制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?
用v-html解决Vue.js渲染中html标签不被解析的问题
,网页ppt怎么弄成自己的ppt?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
建设网站制作价格,怎样建立自己的公司网站?
香港服务器如何优化才能显著提升网站加载速度?
阿里云网站制作公司,阿里云快速搭建网站好用吗?
如何快速打造个性化非模板自助建站?
制作门户网站的参考文献在哪,小说网站怎么建立?
建站之星ASP如何实现CMS高效搭建与安全管理?
XML的“混合内容”是什么 怎么用DTD或XSD定义
如何选择高效响应式自助建站源码系统?
高端网站建设与定制开发一站式解决方案 中企动力
如何在建站之星网店版论坛获取技术支持?
建站DNS解析失败?如何正确配置域名服务器?
ppt制作免费网站有哪些,ppt模板免费下载网站?
制作网站的公司有哪些,做一个公司网站要多少钱?
网站制作公司排行榜,四大门户网站排名?
SQL查询语句优化的实用方法总结
已有域名如何快速搭建专属网站?
企业网站制作公司网页,推荐几家专业的天津网站制作公司?
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
*请认真填写需求信息,我们会在24小时内与您取得联系。