[转]Laravel与bootstrap-editable实现table的行内编辑

【转】Laravel与bootstrap-editable实现table的行内编辑

准备需要的库

前端处理

引入库

要使用插件,首先要在blade模板(或者说html)里引入对应的js文件和css文件

  • bootstrap引入

     <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet"/>
     <script src="bootstrap/js/jquery-1.11.2.min.js"></script>
     <script src="bootstrap/js/bootstrap.min.js"></script>
  • bootstrap-table引入
     <script src="bootstrap-table/dist/bootstrap-table.js" type="text/javascript"></script>
     <script src="bootstrap-table/dist/locale/bootstrap-table-zh-CN.js" type="text/javascript"></script>
     <link href="bootstrap-table/dist/bootstrap-table.css" rel="stylesheet">
     <script src="bootstrap-table/dist/extensions/editable/bootstrap-table-editable.js" type="text/javascript"></script>
  • x-editable-develop引入
    <script src="x-editable-develop/dist/bootstrap3-editable/js/bootstrap-editable.js" type="text/javascript"></script>

    html代码

    在blade模板(html页面)加入table代码如下

    <div class="container" z-index="-1">
    <!--表格-->
    <div class="row">
        <div class="col-lg-offset-1 col-lg-11   col-md-offset-1 col-md-11 col-sm-offset-1 col-sm-11 col-xs-offset-2 col-xs-10">
            <table id="StuTable" z-index="-1" dataclasses="table" data-undefined-text="-" data-striped="true"
                   data-sort-order="asc" data-sort-stable="true" data-pagination="true" data-page-number="1"
                   data-page-size="10" data-search="true"></table>
        </div>
    </div>
    </div>

    可以看到里面有很多bootstrap-table的属性,可以大家可以查阅官方文档,当然bootstrap-table的属性可以在js代码中设置

js代码

使用laravel作为框架,我们项目中使用的是课程->任务->学生成绩的思路,所以暂时没想到怎么在js文件里改对应的route,所以把url用route表示在blade模板里,脱离数据库,只讨论对ajex交互的处理

js代码如下

<script type="text/javascript">
        $(document).ready(function(){
            $(‘#StuTable‘).bootstrapTable({
                columns: [{
                    checkbox:true
                },
                    {
                        field: ‘StuNumber‘,
                        title: ‘学生学号‘
                    }, {
                        field: ‘StuName‘,
                        title: ‘学生姓名‘
                    }, {
                        field: ‘StuScore‘,
                        title: ‘学生成绩‘,
                        editable:{
                            type:"text"
                        }
                    }],
                url: "{{route("grade")}}",
                onEditableSave:function (field,row,oldvalue,$el) {
                    $.ajax({
                        type: "post",
                        url: "{{route(‘editable‘)}}",
                        data: row,
                        dataType: ‘json‘,
                        headers: {
                            ‘X-CSRF-TOKEN‘: $(‘meta[name="_token"]‘).attr(‘content‘)
                        },
                        success: function (data, status) {
                            if (status == "success") {
                                alert(‘提交数据成功‘);
                            }
                        },
                        error: function () {
                            alert(‘编辑失败‘);
                        },
                        complete: function () {
                            alert(‘完成‘);
                        }
                    });
                }
            });
        });
    </script>
  • columns中的代码意义是,有勾选框,table的三列分别为学生学号,学生姓名,学生成绩,学生成绩中的editable:true表示成绩可以进行编辑
  • url中使用route给出了提供数据的对应的方法
  • onEditableSave是在行内进行编辑的时候,对应的处理方法

后端处理

生成并给出json格式的数据

在url中我们使用了url: "{{route("grade")}}",所以在laravel对应的路由web.php中,我们加入一条

Route::get(‘/grade‘,‘[email protected]‘)->name(‘grade‘);

这里的控制器是自己随便填的哈,我看到很多大佬都用AjexController,但是我们项目中主要针对user,测试的时候我就用了UsersController,添加了一条grade方法

接下来要在grade方法中反馈json格式的数据

值得一提的是,如果不用后端返回的json数据的话,可以去掉url那一条,加入data和对应的json数据,比如:

data: [{
            StuNumber:"PB15000000",
            StuName: "张三",
            StuScore: ‘98‘
        }, {
            StuNumber:"PB15000000",
            StuName: ‘李四‘,
            StuScore: ‘100‘
        }]

所以在grade方法中,我们也要返回这样的json数据,用一个二维索引数组,里面的一维数组用关联数组形式给出即可,代码如下:

 public function grade(){
         $arr=array(
             array("StuNumber"=>"PB15000000",
                    "StuName"=> ‘张三‘,
                    "StuScore"=> ‘98‘),
             array("StuNumber"=>"PB15000001",
                    "StuName"=> ‘李四‘,
                    "StuScore"=> ‘100‘));
         return json_encode($arr);
    }

json_encode函数会把数组转化成json格式

所以现在我们就可以看到效果如下

点击成绩即可修改

修改数据传给后端

接下来我们要解决的就是修改数据的onEditableSave函数了

使用jQuery,我们写成如下形式

onEditableSave:function (field,row,oldvalue,$el) {
                    $.ajax({
                        type: "post",
                        url: "{{route(‘editable‘)}}",
                        data: row,
                        dataType: ‘json‘,
                        headers: {
                            ‘X-CSRF-TOKEN‘: $(‘meta[name="_token"]‘).attr(‘content‘)
                        },
                        success: function (data, status) {
                            if (status == "success") {
                                alert(‘提交数据成功‘);
                            }
                        },
                        error: function () {
                            alert(‘编辑失败‘);
                        },
                        complete: function () {
                            alert(‘完成‘);
                        }
                    });
                }

这里的row就是我们一行对应的数据,需要传到后端,插件会帮我们转成json格式,所以不必我们操心

测试的时候我使用了post方法,解决方案如下

在blade模板加上

<meta name="_token" content="{{ csrf_token() }}"/>

在ajax函数中加入headers

headers: {
                            ‘X-CSRF-TOKEN‘: $(‘meta[name="_token"]‘).attr(‘content‘)
                        }

success表示成功时的输出,error表示错误时的输出,complete表示完成后的输出

这里的url依旧使用route表示,所以在web.php中加入post

Route::post(‘/editable‘,‘[email protected]‘)->name(‘editable‘);

对应的editable方法如下


    public function editable(Request $request){
         //处理代码
    }

其中的request对象里就包含了的前端传回的row的数据,所以我们可以像处理表单一样,使用如下方式得到需要的数据

$request->input(‘StuNumber‘)
$request->input(‘StuName‘)
$request->input(‘StuScore‘)

然后对数据库进行操作即可

最后

此时我们修改成绩,并使用浏览器的开发者模式,提交成功后可以看到效果如下:

右下方有Form Data,就是传给后端的数据

转自http://blog.csdn.net/weixin_38312031

原文地址:https://www.cnblogs.com/ustc-rjgc2017/p/8443556.html

时间: 2024-08-15 09:15:55

[转]Laravel与bootstrap-editable实现table的行内编辑的相关文章

bootstrap行内编辑后提交多条数据到ssm

先定义一个数组用于接收修改的数据:var changeRows = new Array();在bootstrap属性定义上添加类似:onEditableSave: function (field, row, oldValue, $el) {$table.bootstrapTable('updateRow', {index: row.rowId, row: row});//将 行对象转化为json字符串并放入changeRows数组var result = JSON.stringify(row);

JS组件系列——Bootstrap Table 表格行拖拽

原文:JS组件系列--Bootstrap Table 表格行拖拽 前言:之前一直在研究DDD相关知识,好久没更新JS系列文章了.这两天做了一个简单的业务需求,觉得效果还可以,今天在这里分享给大家,欢迎拍砖~~ 一.业务需求及实现效果 项目涉及到订单模块,那天突然接到一个需求,说是两种不同状态的订单之间要实现插单的效果,页面上呈现方式是:左右两个Table,左边Table里面是状态为1的订单,右边Table里面是状态为2订单,左边Table里面的行数据拖动到右边Table里面指定行的位置,拖动完成

为 Laravel 启用 Bootstrap 4

尽管 Laravel 已经推出到 5.5 版本,但其默认的 Bootstrap 组件仍然是 3 的版本,而 Bootstrap 4 已经 Beta 很长一段时间,或许因为不是正式版 Laravel 并没有集成新版本,但我们完全可以手动把版本更换成 4.0. 以下内容对应 Laravel 5.5 版本 首先需要卸载默认的 Bootstrap 组件,在工程根目录下执行npm uninstall --save-dev bootstrap-sass然后安装新的 Bootstrapnpm install

Bootstrap历练实例:标签页内的下拉菜单

<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>Bootstrap历练实例:标签页内的下拉菜单</title> <meta charset="utf-8" /> <meta name="vie

关于Jquery获取Table中td内的内容

$(this).children().eq(1).text()获取的是显示的值$(this).children().eq(1).html()获取的是<td></td>之间的所有内容$('.trSelected',grid).find("td").eq(7).text();获取的是选中的某行的内容 遍历表<table id="gird"..... $("#grid tr").each(function() {     

javascript添加或者删除table表格行代码实例

javascript添加或者删除table表格行代码实例:表格是常用的元素,虽然在布局中已经鲜有使用,已经基本被div css所取代,但是在组织表格数据方面还是有很大的优势的,比使用div css要来的方便,添加或者删除一行也就是其中的tr更是最为常见的操作,下面就通过代码实例简单介绍一下如何实现此效果.代码如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta

web开发学习笔记(4):js获取table的行数和表格中某一行某一列的内容

table的id="tab" 一.获取table的行数 var count=document.getElementById("tab").rows.length; 二.获取第i行第j列的内容(方式不止三种,根据实际情况选择,比较推荐方式一) 方式一: <pre name="code" class="html"><strong>var title=tab.rows[i].cells[j].children

ie6/7下给table的行tr 添加position:relative;的奇特bug,求大神告知

代码: <!DOCTYPE html> <html> <head> <title>ie6/7下给table的行tr 添加position:relative;的奇特bug,求大神告知</title> <style> * { padding: 0; margin: 0; } table tr { position: relative;float:left;overflow:hidden;z-index:1;height:100%;widt

RobotFramework获取table的行数

RobotFramework获取table的行数,用以下关键字: ${lineNumber}= Get Matching Xpath Count //*[@class='dataview']/tbody/tr 原文地址:https://www.cnblogs.com/daphnezhu/p/12132160.html