Bootstrap Bootstrap表格插件bootstrap-table配置與應用小結

来源:https://www.cnblogs.com/shouke/archive/2019/05/18/10885971.html
-Advertisement-
Play Games

Bootstrap表格插件bootstrap-table配置與應用小結 by:授客 QQ:1033553122 win7 JQuery-3.2.1.min.js 下載地址: https://gitee.com/ishouke/front_end_plugin/blob/master/jquery-3 ...


Bootstrap表格插件bootstrap-table配置與應用小結

 

by:授客 QQ1033553122

  1. 1.   測試環境

win7

 

JQuery-3.2.1.min.js

下載地址:

https://gitee.com/ishouke/front_end_plugin/blob/master/jquery-3.2.1.min.js

 

Bootstrap-3.3.7-dist

下載地址:

https://gitee.com/ishouke/front_end_plugin/blob/master/bootstrap-3.3.7.zip

 

bootstrap-table-develop-v1.12.1.zip

下載地址:

https://github.com/wenzhixin/bootstrap-table

https://gitee.com/ishouke/front_end_plugin/blob/master/bootstrap-table-develop-v1.12.1.zip

 

  1. 2.   配置與應用

效果展示

 


HTML代碼片段

head設置

<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
 
<!-- 上述3meta標簽*必須*放在最前面,任何其他內容都*必須*跟隨其後! -->
{% load staticfiles %}
 
<!-- jQuery (Bootstrap 的所有 JavaScript 插件都依賴 jQuery,所以必須放在前邊) -->
<script type="text/javascript" src="{% static  'website/jquery-3.2.1.min.js' %}" defer></script>
 
<!-- Bootstrap -->
<link rel="stylesheet" type="text/css" href="{% static 'website/bootstrap-3.3.7-dist/css/bootstrap.min.css' %}" />
 
<!-- 載入 Bootstrap 的所有 JavaScript 插件。你也可以根據需要只載入單個插件。 -->
<script type="text/javascript" src="{% static  'website/bootstrap-3.3.7-dist/js/bootstrap.min.js' %}" defer></script>
 
 
<!-- HTML5 shim  Respond.js 是為了讓 IE8 支持 HTML5 元素和媒體查詢(media queries)功能 -->
<!-- 警告:通過 file:// 協議(就是直接將 html 頁面拖拽到瀏覽器中)訪問頁面時 Respond.js 不起作用 -->
<!--[if lt IE 9]>
<script src="https://cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js" defer></script>
<script src="https://cdn.bootcss.com/respond.js/1.4.2/respond.min.js" defer></script>
<![endif]-->
 
<!-- Bootstrap-Table -->
<link rel="stylesheet" type="text/css" href="{% static 'website/bootstrap-table-1.12.1-dist/bootstrap-table.min.css' %}" />
<script type="text/javascript" src="{% static  'website/bootstrap-table-1.12.1-dist/bootstrap-table.min.js' %}" defer></script>
<!-- 引入中文語言包,註意:locale files 必須放在bootstrap-table.js後面 -->
<script type="text/javascript" src="{% static  'website/bootstrap-table-1.12.1-dist/locale/bootstrap-table-zh-CN.min.js' %}" defer></script>
 
……略
 
</head>

table及toolbar工具條

<div class="container-fluid">
<div class="row">
<table id="roleTable"></table>
 
<div id="toolbar">
<div class="btn-group">
<button class="btn btn-default" data-toggle="modal" data-target="#roleDialog" id="addBtn">新增
<i class="glyphicon glyphicon-plus"></i>
</button>
<button class="btn btn-default" id="editBtn">修改
<i class="glyphicon glyphicon-edit"></i>
</button>
<button class="btn btn-default" id="deleteBtn">刪除
<i class="glyphicon glyphicon-remove"></i>
</button>
</div>
 
<form class="form-inline" id="queryForm">
<div class="form-group">
<div class="input-group">
<div class="input-group-addon">角色名稱</div>
<input  type="text" class="form-control" name="roleNameQ" id="roleNameQ" placeholder="請輸入角色名稱">
</div>
<div class="input-group date" id="startTimePicker">
<div class="input-group-addon">開始時間</div>
<input  type="text" class="form-control" name="startTime" id="startTime" >
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
<div class="input-group date" id="endTimePicker">
<div class="input-group-addon">結束時間</div>
<input  type="text" class="form-control" name="endTime" id="endTime">
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</div>
 
<button type="button" id="queryBtn" class="btn btn-primary queryButton">查詢</button>
</form>
</div>
</div>
</div>

 

 

JS代碼片段

數據表初始化配置

 

/**

 * 獲取角色表數據

 */

function loadTableData () {

$('#' + roleTableID).bootstrapTable({

url: roleTableDataURL, // 伺服器數據的載入地址。

method:'get',     // 伺服器數據的請求方式 'get' 或 'post'。

pagination:true,// 在表格底部顯示分頁信息(顯示第 x 到第 x 條記錄,總共 x 條記錄),翻頁條 // 註意:數據頁頁數超過1頁會才展示翻頁條

paginationVAlign:'bottom', // 指定分頁條在垂直方向的位置。'top','bottom' 或 'both'。

sidePagination:'server', // 設置在哪裡進行分頁,可選值為 'client' 或者 'server'。註意:設置 'server'時,必須設置伺服器數據地址(url)或者重寫ajax方法。

responseHandler:responseHandler, // 載入伺服器數據之前的處理程式,可以用來格式化數據。

pageSize:10, // 如果啟用分頁,設置初始化界面時,預設的每頁顯示數據條數

pageList:[10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 'All'],  // 如果設置了分頁,設置可供選擇的頁面記錄數。設置為 All 或者 Unlimited,則顯示所有記錄

smartDisplay:false, // 設置為 true 是程式自動判斷顯示分頁信息和 card 視圖。這會導致自定義的 pageList不起作用

silentSort:true, // 設置為true將在點擊分頁按鈕時,自動記住排序項。僅在 sidePagination設置為 server時生效

showColumns:true, // 展示內容列下拉框,方便設置展示那些列

showRefresh:true, //   顯示刷新按鈕

idField:'id',     // 指定主鍵列

        //dataField: "data",  //返回的json數組記錄(表格數據)的key.預設是"rows", 數據格式: {"total": 0, "rows": []}

checkboxHeader:true, // 如果設置 false,將在列頭隱藏全選覆選框,反之則顯示,設置為ture時,必須設置singleSelect=false 才有效

clickToSelect:true, // 如果設置 true,則在點擊行時,自動選中 rediobox 、 checkbox。

singleSelect:false,  //如果設置為true - 禁止多選,否則不禁止多選

striped:true, // 設置為 true 會有隔行變色效果

toolbar:'#toolbar', // 一個jQuery 選擇器,形如#toolbar, .toolbar,指明自定義的 toolbar       

toolbarAlign:'left', // 指定 toolbar 水平方向的位置。'left' 或 'right'。

columns: [{

field: 'checkbox',

align: 'center',   // 設置數據對齊方式可選項: 'left', 'right', 'center'

halign: 'center',  // 設置表頭標題對齊方式可選項: 'left', 'right', 'center'

valign: 'middle',   // 設置單元格數據的垂直方向上的對齊方式,有:top(靠上)、middle(居中)、bottom(靠下)針對checkbox似乎不起作用

checkbox:true,    // 顯示為覆選框

width: '1%',// 設置列寬度

        },{

field: 'id',

title: '角色ID',

align: 'center',

halign: 'center',

valign:'middle',

sortable:true, // 允許排序列

order:'desc',  // 預設排序方式升序-asc 降序-desc

width: '2%',

        }, {

field: 'name',

title: '角色名稱',

align: 'center',

valign: 'middle',

halign: 'center',

width: '14%'

}, {

field: 'remark',

title: '角色描述',

valign: 'middle',

align: 'center',

halign: 'center',

width: '20%'

}, {

field: 'is_enable',

title: '是否啟用',

valign: 'middle',

align: 'center',

halign: 'center',

width:'4%'

}, {

field: 'creater',

title: '創建人',

valign: 'middle',

align: 'center',

halign: 'center',

width:'7%'

}, {

field: 'create_time',

title: '創建時間',

valign: 'middle',

align: 'center',

halign: 'center',

width:'11%'

}, {

field: 'modifier',

title: '修改人',

valign: 'middle',

align: 'center',

halign: 'center',

width:'7%'

},{

field: 'modify_time',

title: '修改時間',

valign: 'middle',

align: 'center',

halign: 'center',

width:'11%'

},{

field:'operate',

title:'操作',

algin:'left',

halgin:'center',

width:'23%',

events: operateEvents,

formatter:operateFormatter

} ]

    });

}

 

// 載入表格數據

loadTableData();

 

載入伺服器數據之前的數據處理(responseHandler)

/**
 * 載入伺服器數據之前的處理程式,可以用來格式化數據。
 * 參數:result為從伺服器請求到的數據
 * @param result
 */
function responseHandler(result){
if (result.success == 'false') {
alert('獲取角色信息失敗');
return;
    }
 
// 返回數據,渲染表格
return {
total: result.data.total, //總頁數, key名稱固定為"total"
rows: result.data.rows    //行數據,key名稱必須和bootstrapTable函數中dataField的值保持一致,預設為rows.
};
};
 

格式化操作列

/**
操作列格式化函數
 */
function operateFormatter(value, row, index) {
if (row.is_enable == '') {
return  ''+
'<div class="btn-group">' +
'<button class="btn btn-default asign-resource">分配資源&nbsp;<i class="glyphicon glyphicon-plus"></i></button>' +
'<button class="btn btn-default edit" >修改&nbsp;<i class="glyphicon glyphicon-edit"></i></button>' +
'<button class="btn btn-default delete">刪除&nbsp;<i class="glyphicon glyphicon-remove"></i></button>' +
'<button class="btn btn-default switch" >禁用&nbsp;<i class="glyphicon glyphicon-cog"></i></button>' +
'</div>';
    } else {
return  ''+
'<div class="btn-group">' +
'<button class="btn btn-default asign-resource">分配資源&nbsp;<i class="glyphicon glyphicon-plus"></i></button>' +
'<button class="btn btn-default edit" >修改&nbsp;<i class="glyphicon glyphicon-edit"></i></button>' +
'<button class="btn btn-default delete">刪除&nbsp;<i class="glyphicon glyphicon-remove"></i></button>' +
'<button class="btn btn-default switch" >啟用&nbsp;<i class="glyphicon glyphicon-cog"></i></button>' +
'</div>';
    }
 
}
 

給操作列按鈕註冊點擊事件

// 給操作按鈕註冊點擊事件

window.operateEvents = {

'click .asign-resource': function (event, value, row, index) { // 註意click.class之間必須有空格

……略

    },

'click .edit': function (event, value, row, index) {

……略

 

    },

'click .delete': function (event, value, row, index) {

……略

    },

'click .switch': function (event, value, row, index) {

……略

    }

};

 

函數參數說明:

event:jQuery事件(參考Events)。

value:欄位名(實踐發現,該參數獲取到的值為undefined

row:json串格式表示的行數據

index:所點擊行的index

 

給toolbar工具條按鈕添加點擊事件

// 給查詢按鈕增加點擊事件
$('#' + queryBtnID).click(function () {
//刷新處理,指定query 的參數,註:此地方指定的參數,僅在當次刷新時使用
 
var dataArray = $('#' + queryFormID).serializeArray();
 
var queryContent = {}
$.each(dataArray, function () {
queryContent[this.name] = this.value;
    });
 
// 刷新如果不指定參數刷新:$(tableSelector).bootstrapTable('refresh');
$('#' + roleTableID).bootstrapTable('refresh', {
query: queryContent
});
 
});
 
// 給表格上方的修改按鈕綁定點擊事件
$('#' + editBtnID).click(function() {
editRole('byTopEditBtn');
});
 
// 給表格上方的刪除按鈕綁定點擊事件
$('#' + deleteBtnID).click(function() {
deleteRole('byTopDeleteBtn');
});
 

提交新增、修改表單

/**

 * 提交新增、修改角色表單

 */

$(document).ready(function() {

$('#' + roleFormID).submit(function() {

var dataArray = $('#' + roleFormID).serializeArray();

 

var data = {};

$.each(dataArray, function () {

data[this.name] = this.value;

        });

 

var csrfToken = getCookie('csrftoken');

if (csrfToken == '') {

alert('獲取Cookie失敗');

return false;

        }

 

if (opType == 'add') { // 新增

$.ajax({

type: "POST",

url: addRoleURL,

async: false,

data: data,

beforeSend: function (xhr, settings) {

if (!csrfSafeMethod(settings.type) && !this.crossDomain) {

                        xhr.setRequestHeader("X_CSRFTOKEN", csrfToken);

                    }

                },

success: function (result) {

if (result.success == 'true') {

alert(result.msg);

 

// 頂部插入一條記錄

$('#' + roleTableID).bootstrapTable('insertRow', {index: 0, row: result.data});

$('#' + roleTableID).bootstrapTable('refresh');

 

// 隱藏模態對話框,並重置數據

$('#' + roleDialogID).modal('hide');

                    } else {

alert(result.msg + "" + result.reason);

                    }

                },

error: function(XmlHttpRequest, textStatus, errorThrown) {

alert('新增角色請求失敗' + XmlHttpRequest.responseText);

                }

            });

        } else if (opType == 'update') { // 修改

data['id'] = currentRole.id;

$.ajax({

type: "POST",

url: updateRoleURL,

async: false,

data: data,

beforeSend: function (xhr, settings) {

if (!csrfSafeMethod(settings.type) && !this.crossDomain) {

                        xhr.setRequestHeader("X_CSRFTOKEN", csrfToken);

                    }

                },

success: function (result) {

if (result.success == 'true') {

alert(result.msg);

 

// 在頁面上更新角色信息

delete data['csrfmiddlewaretoken'];

 

// 更新行記錄

$('#' + roleTableID).bootstrapTable('updateRow', {index: parseInt(rowIndex), row:result.data});

 

// 隱藏模態對話框,並重置數據

$('#' + roleDialogID).modal('hide');

                    } else {

alert(result.msg + "" + result.reason);

// 需要手動關閉模態對話框,所以也會自動重置數據

}

                },

error: function(XmlHttpRequest, textStatus, errorThrown) {

alert('修改角色請求失敗' + XmlHttpRequest.responseText);

// 需要手動關閉模態對話框,所以也會自動重置數據

}

            });

        }

 

return false; // 避免跳轉到django的返回結果數據頁

});

});

 

 

插入行

$('#tableID').bootstrapTable('insertRow', {index: 0, row: result.data});

參數說明:

index 新增行的索引

row  新增行的數據,json串表示

 

更新行

$('#tableID').bootstrapTable('updateRow', {index: parseInt(rowIndex), row:result.data});

 

參數說明

index 要更新行的索引

row  要更新行的數據據,json串表示

 

修改記錄

 

/**

 * 修改角色

 */

function editRole(flag) {

opType = 'update';

if (flag == 'byTopEditBtn') { // 通過點擊表格上方的修改按鈕進入

var rowArray = $('#' + roleTableID).bootstrapTable('getSelections');

if (rowArray.length <1) {

alert('請先選擇要修改的角色');

return;

        } else if (rowArray.length >1) {

alert('每次修改,只能選擇一個角色');

return;

        }

 

// 獲取選中行索引

rowIndex = $('#' + roleTableID).find('tbody>tr.selected').first().attr('data-index');

 

currentRole = rowArray[0]; // 記錄當前被修改的角色信息

 

data = [{'name': 'roleName', 'value':rowArray[0].name}, {'name':'roleDesc', 'value':rowArray[0].remark}]

    } else if (flag == 'byRowEditBtn') { // 通過點擊行右側的修改按鈕進入

data = [{'name': 'roleName', 'value':currentRole.name}, {'name':'roleDesc', 'value':currentRole.remark}]

    }

 

// 用所選記錄信息,填充即將彈出對話框中表單組件值

$.each(data, function () {

$('#' + this.name).val(this.value);

    });

 

$('#' + roleDialogID).modal('show'); // 打開修改模態對話框

 

}

 

獲取選中行索引

rowIndex = $('#' + roleTableID).find('tbody>tr.selected').first().attr('data-index');

 

這裡為啥要獲取,為啥可以這麼獲取?原因是這樣的,通過選擇表記錄行,然後點擊表格上方的修改按鈕修改對應記錄,這種情況下,無法直接獲取對應行記錄的索引,導致沒法更新對應記錄行,所以需要獲取索引,沒找到對應,至於為啥這麼獲取,是由table 表結構決定的,如下圖:

 

 

 

刪除記錄

/**

 * 刪除角色

 */

function deleteRole(flag) {

v

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一般我們在Android開發當中如果會對一些數據類進行解析,那麼則需要寫出一個JavaBean的類,比如在進行json解析的時候,就需要使用這個類進行數據的處理,下麵是我們的JavaBean的模板代碼: ...
  • 知名數位博主@數位閑聊站放出了一張高通驍龍730處理器的跑分成績,高達20萬分,性能還是不錯的。 據悉驍龍730通過直觀的照片拍攝、卓越的游戲體驗和優化的性能,將業界領先的終端側AI技術帶入移動體驗。通過 提供過去僅在驍龍8系終端支持的技術,驍龍730實現了全新的體驗升級。 AI方面:Qualcom ...
  • 使用手機上的程式,來分享/發送,比如QQ的“發送到我的電腦”。 1、分享/發送文本內容 通用步驟: 首先將Intent的cation設置為Intent.ACTION_SEND, 其次根據分享的內容設置不同的Type, 然後根據不同的社交平臺設置相關Extras, 最後創建並啟動選擇器 2、分享/發送 ...
  • 首次使用博客,很多東西都在探索,第一篇文章也不知道發佈點什麼,就隨便寫寫,是在word裡面寫的,也懶得排版,將就這用吧。 閑著沒事找了酷狗的API寫了個簡單的靜態網頁,完成了搜索,展示,播放功能。就想著給搜索框寫一個搜索推薦的下拉列表框,思路很明確,不寫了畫圖 代碼如下 樣式表 可是在引用樣式表的時 ...
  • 前言 要正確理解this,首先得理解執行上下文,這裡推薦湯姆大叔的 "執行上下文" ,因為 是在運行代碼時確認具體指向誰,箭頭函數除外。 全局作用域中的this : 每個 文件都是一個模塊, 指向空對象( ) 當然也有些意外,比如下麵這種情況: 瀏覽器端 : 指向 。 函數作用域中的this 這裡分 ...
  • 這個問題是解決基於 vue 和 electron 的開發中使用 vuex 的 dispatch 無效的問題,即解決了 Please, don't use direct commit's, use dispatch instead of this. 問題。先允許我梳理一下目錄結構,以便閱讀的時候不會一 ...
  • 經過前面幾次的學習,已經可以做下小功能,今天要實現的事用戶註冊路由。 一、users_model.js 功能:定義用戶對象模型 二、users_controller.js 功能:為Express伺服器實現用戶註冊的路由 三、signup.html 用戶註冊頁面 四、routes.js 功能:為Exp ...
  • es7 async和await ,作為genertor函數語法糖,在使用上比generator函數方便的,Generator 函數就是一個封裝的非同步任務,或者說是非同步任務的容器。非同步操作需要暫停的地方,都用yield語句註明. generator將非同步的流程標記的很簡潔,但是流程執行卻並不方便,所有 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...