关于如何将table中的td标签转换成input标签以及将修改的数据通过ajax保存服务器

本文为笔者原创转载请标明出处
这个问题很多做后端的猿们在做涉及到前端开发的项目时可能会遇到,恰好这个问题也被我遇到了。如何解决这个问题,听笔者细细道来,笔者并非什么大牛,再做这个项目的时候跳了几个坑,希望我的文章能够帮助到大家,也希望读者能指出文章中的错误。当然你要有更好的解决方案请告诉我。
废话不多说,直接上代码。

  • 前端html中嵌入js的代码
  • jquery ajax的相关代码
  • 服务器端的代码

前端html的代码

    <table class="table table-striped">
        <thead>
            <tr>                            
            <th>姓名</th>
            <th>职务</th>
            <th>职称</th>
            <th>工号</th>
            <th>部门</th>
            </tr>
        </thead>
    <tbody id="jobTeacherinfo">
    </tbody>
    </table>

嵌入js代码:

笔者在开发这个项目时服务端用的是php语言和thinkPHP框架开发的,上边代码的意思是将数据库的数据取出显示成表格形式,arrayObj[‘19’][i][‘name’]这种形式的数据代表从数据库取出的数据。

  var arrayObj ={$jsdata};
  var driveLetter = document.getElementById('jobTeacherinfo').innerHTMl; 
 var j=1;
if(arrayObj['19'].length!=undefined){
    for(var i=0;i<arrayObj['19'].length;i++){
     data2[i] ='<tr><td>'+j+'</td>'+
         '<td>'+arrayObj['19'][i]['name']+'</td>'+
         '<td>'+arrayObj['19'][i]['status']+'</td>'+
         '<td>'+arrayObj['19'][i]['title']+'</td>'+
         '<td>'+arrayObj['19'][i]['no']+'</td>'+
         '<td>'+arrayObj['19'][i]['dp']+'</td>'+
         //隐藏域传值
         '<td><input type="hidden" name="db" value="teachinfo"></td><td><button>save</button></td></tr>';
                   j++;
         }
        document.getElementById("jobTeacherinfo").innerHTML=data2.join("");
        data2=null;
        }

jquery ajax代码:

$(function() {
  $('table td').dblclick(
      function() {
         if (!$(this).is('.input')) {
            $(this).addClass('input').html(
            '<input type="text" value="'+$(this).text()+'" />').find('input').focus().blur(
            function() {                    $(this).parent().removeClass('input').html(									$(this).val() || 0);});
                }
            }).hover(function() {
        $(this).addClass('hover');
    }, function() {
        $(this).removeClass('hover');
    });
});

$(function() {
    $('button').click(function(){
            //var p_nex=$(this).nextAll().andSelf();
        //var p_nex=$(this).siblings('td:eq(0)').text();
var data={
//获取第一列td内的值
id:$(this).parents('tr').find('td').eq(0).text(),
//获取第二列td内的值
name: $(this).parents('tr').find('td').eq(1).text(),
status:$(this).parents('tr').find('td').eq(2).text(),
dtitle: $(this).parents('tr').find('td').eq(3).text(),
no: $(this).parents('tr').find('td').eq(4).text(),
dp: $(this).parents('tr').find('td').eq(5).text(),
//获取第一列td内隐藏域的值
type:$(this).parents('tr').children('td').children('input:hidden[name="typename"]').val(),
//获取第一列td内隐藏域的值
typete:$(this).parents('tr').children('td').children('input:hidden[name="typena"]').val(),
//获取第一列td内隐藏域的值
hiddend:$(this).parents('tr').children('td').children('input:hidden[name="db"]').val(),
            };
            alert(data.no);
            $.ajax({
                type : 'post',
                url : '../Start/toAjax',
                data : data,
                cache : false,
                dataType : 'json',
                error : function(e) {
                    alert("提交数据失败!");
                    return false;
                },
                success : function(data) {
                    if (data.status == 1) {
                        alert((data.info));
                        return true;
                    }
                    if (data.status == 0) {
                        alert(data.info);
                        return false;
                    }
                    if (data.status == -1) {
                        alert(data.info);
                        return false;
                    }
                }
            });
    });
});

服务器端的代码

 public function toAjax(){
    if (IS_AJAX){
            $data= I('post.');

            if ($data['hiddend']=="数据库表名") {
                $temp=[
                    'id'=>$data['id'],
                    'name'=>$data['name'],
                    'status'=>$data['status'],
                    'dtitle'=>$data['dtitle'],
                    'no'=>$data['no'],
                    'dp'=>$data['dp'],
                    'db'=>$data['hiddend'],
                    'type'=>$data['type'],
                    'typete'=>$data['typete'],
                ];
                $wherefind['name']=$data['no'];
                $wherefind['schoolName']=$schoolName;
            }
            //将修改的数据保存到数据库
$re= $Util->updata($data['hiddend'], $wherefind, $temp);
 if (!$re) {
        $this->ajaxReturn(array(
              'status' => 0,
              'info' =>"数据修改失败!".implode(',',$temp)
                    ));
         }else {
            $this->ajaxReturn(array(
               'status' => 1,
                  'info' => "数据修改成功"
                    ));
            }
   }      
}
要在 HTML 创建一个可编辑的表格,你可以使用 `<table>` 标签和 `<input>` 标签。具体来说,你可以将每个单元格都创建为一个 `<input>` 元素,然后在用户编辑单元格内容时,使用 JavaScript 来捕获表格数据并将其发送到服务器保存。 以下是一个示例代码,它创建了一个包含两个输入框的表格,并使用 jQuery 和 AJAX 技术将表格数据发送到服务器: ```html <!DOCTYPE html> <html> <head> <title>可编辑表格</title> <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script> <script> $(document).ready(function() { // 当输入框内容发生变化时,保存表格数据 $('input').on('input', function() { var data = { row: $(this).parent().parent().index(), // 行号 col: $(this).parent().index(), // 列号 value: $(this).val(), // 单元格内容 }; $.ajax({ url: 'save.php', // 保存数据服务器端脚本 method: 'POST', data: data, success: function(response) { console.log(response); // 打印服务器响应 }, error: function(error) { console.error(error); // 打印错误信息 } }); }); }); </script> </head> <body> <table> <tr> <td><input type="text" value="1"></td> <td><input type="text" value="2"></td> </tr> <tr> <td><input type="text" value="3"></td> <td><input type="text" value="4"></td> </tr> </table> </body> </html> ``` 在这个示例,我们使用了 jQuery 库来简化 JavaScript 代码。当输入框内容发生变化时,会触发 `input` 事件,然后使用 AJAX 技术将表格数据发送到服务器上的 `save.php` 脚本。服务器脚本可以在收到数据后,将其保存数据库或者文件系统。 需要注意的是,这个示例服务器脚本 `save.php` 还没有实现,你需要根据自己的需求编写这个脚本。同时,这个示例的代码还没有进行安全性检查和错误处理,实际应用需要根据具体情况进行完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值