柔晶美网络工作室

柔晶美网络工作室,倾心于web技术的博客站点

关注我 微信公众号

您现在的位置是: 首页 > 博客日记

重构PHP通用查询系统之3----jquery datatable表格如何双击修改?

2020-01-26 admin php  1640

上一章讲了使用jquery datatable后台读取数据后生成表格,实现了排序、搜索和分页功能。现在我们学习一下,如何双击单元格,可以编辑该单元格数据,编辑完点单元格外任意地方,自动提交保存到数据库的方法。

这个对于普通HTML表格也是一样的,只需要有JQ即可。原理是:双击->保存该单元格对象->给单元格添加input->输入->离开单元格ajax保存。

具体过程请看完整代码:

//双击修改
myTable.on("dblclick","td",function(){
if($(this).children("input").length>0){
return false;
}
tdDom = $(this);//保存点击数据为全局变量
var tdPreText = $(this).text();//保存初始值
var lie = tdDom.prevAll().length;//第几列
var zdjson = "";
var zdsz = zdjson.split(","); //字段数组
var zd = zdsz[lie];//双击td所在列名,1234对应数据库4567
//console.log(zd);
if(zd == undefined){
jQuery.alertWindow("该列禁止修改");
}else{
$(this).html("").find("input").val(tdPreText);//给td设置宽度和给input设置宽度并赋值
var inputDom = $(this).find("input");
inputDom.blur(function(){//失去焦点的时候重新赋值
var bm = "";
var newText = $(this).val();//修改后的值
var id = tdDom.parent().children('td').eq(0).text();//行id
var lie = tdDom.prevAll().length;//第几列
var zdjson = "";
var zdsz = zdjson.split(","); //字段数组
var zd = zdsz[lie];//双击td所在列名,1234对应数据库4567
$(this).remove();
if(newText == tdPreText){
console.log(zd);
tdDom.text(tdPreText);//没有修改,赋值回原值
}else if(zd == undefined){
tdDom.text(tdPreText);//禁止修改列,赋值回原值
alert('该列禁止修改');
}else{
tdDom.text(newText);//更新前端显示,没有更改则不更新
//ajax传递到后台更新数据库
$.ajax({
url:'/admin/Tableupdate',
data:{'bm':bm,'id':id,'zd':zd,'zdnr':newText},
type:'POST',
dataType:'json',
success:function(data){
console.dir(data)
if(data == 1){
jQuery.alertWindow("保存成功");
}else{
jQuery.alertWindow("保存失败");
}
}
});
}
});
}
});

另外,因为数据库中有json格式的字符串,用于存在数组,因此,双击该单元格时,需要弹出模态框,让用户选择:

这个实现过程是,先判断单元格是否是json数据,如果是,则弹出模态框,模态框代码:



    
        
            
                ×
                多选框,按住ctrl可多选
            
            
                             关闭                 提交更改                            多选框

JS代码要检测是否为Json字段,可以用函数,也可以检查列名。因这个项目列表字段是固定的,因此采用了检查列我的方式:

if(zd == 'cxtj' || zd == 'kfcxzd' || zd == 'kftbzd'){//需要对json字段进行处理
//ajax读取数据库,获取该表所有字段数组
$.ajax({
url:'/admin/hqzdAll',
data:{'bm':bm},
type:'POST',
dataType:'json',
success:function(data){
//console.dir(data)
if(data.stats == 200){
var zdsz = data.zdsz;
console.log(zdsz);
var first = "";//多选html头部
var end = '';//多选html尾部
var is_json = isJSON(tdPreText);//判断是否json字符串
if(is_json){
//是json格式,先转数组,再读取数据库,并将原来已选择的加selected状态
var obj=JSON.parse(tdPreText);
console.log(obj);
var middle = "";
for(i = 0,len=zdsz.length; i < len; i++) {
if(obj.includes(zdsz[i])){
//在数组中,加selected状态
middle = middle + "" + zdsz[i] + "";
}else{
middle = middle + "" + zdsz[i] + "";
}
}
var html = first + middle + end;
$('#dxknr').html(html);
$('#dxk').click();//点击弹出多选框
}

当然,如果是图片,视频等格式的数据,也可以加以判断,给出相应的交互项目给用户。

文章评论


需要 登录 才能发表评论
热门评论
0条评论

暂时没有评论!