bootstraptable使用總結之前端樣式設計


前言

本人最近在做一個項目,需要將本地文件夾的照片讀取到前台進行顯示,顯示的時候,需要對照片進行批注,如下圖所示。本文涉及的知識點包括:

1,如何設定bootstrap樣式?

2,如何獲取每一行的checkbox的值?

3,按照“文件名-圖片-缺陷類型”進行組裝,利用ajax向后台發送請求,保存到數據庫

這在顯示的時候,就需要對某些列增加checkbox按鈕。在實現的時候也是找了很多的資料,后頭在參考了bootstraptable怎么實現自定義按鈕列的操作的時候,發現了可以return一個HTML代碼塊到相應的table里面,就參照這個思路實現了我的想法。

一:設定bootstrap樣式

知識點1的參考代碼如下:

function showTable() {
    $('#table').bootstrapTable({
        data:imageList,
        columns: [{
            field: 'fileName',
            title: 'fileName',
            formatter : function (value, row, index) {
                console.log()
                return"<p name='fileName'>"+value+"</p>";
            }
        },{
            field: 'base64Image',
            title: '照片',
            formatter : function (value, row, index) {
                return"<img  name= 'imageSrc'    src='"+value+"' alt='' style='width: 60px;height: 60px'>";
            }
        }, {
            field: 'normal',
            title: '正常',
            formatter:function(value, row, index){
                return "<label><input type = \"checkbox\"  value='正常'style='height: 20px;width: 20px'>正常</label>"
            }
        },{
            field: 'curl',
            title: '卷邊',
            formatter:function(value, row, index){
                return "<label><input  type = \"checkbox\" value='卷邊'style='height: 20px;width: 20px'>卷邊</label>"
        }},{
            field: 'fracture',
            title: '破裂',
            formatter:function(value, row, index){
                return "<label><input  type = \"checkbox\"  value='破裂'style='height: 20px;width: 20px'>破裂</label>"
        }}, {
            field: 'notBulge',
            title: '未脹開',
            formatter:function(value, row, index){
                return "<label><input  type = \"checkbox\" value='未脹開'style='height: 20px;width: 20px'>未脹開</label>"
        }}]
    });
}

二:提取每張照片的缺陷 

想要提取每張照片的缺陷,就需要遍歷每一行的checkbox,然后檢查是否checked,如果是,則把每一個checkbox的value保存到一個數組內。這里想要實現這個目標,就需要兩個步驟:准確提取到每一行的checkbox和遍歷每一行的checkbox集合。

2.1准確提取到每一行的checkbox

要想實現准確提取到每一行的checkbox,如果我們把每一行的checkbox都設定一個id,也可以獲取到,但是因為id是變化的且不相同的,所以這就給我們提取造成了困難。

但是同時,我們想到js里面可以針對html元素的name進行提取,這就意味着,我們只需要將每一行的checkbox設定一樣的name就可以了,考慮到知識點1中,formatter中的函數有三個變量,分別是value,row和index,其中index就是每一行的序號,因此我們只需要將index組合到checkbox的name里面,name就可以為每一行設定不一樣的且有規律name。實現代碼如下:

return "<label><input name='checkbox"+index+"' type = \"checkbox\" value='未脹開'style='height: 20px;width: 20px'>未脹開</label>"

2.2遍歷checkbox集合

我們可以通過js的函數:getElementsByName,獲取checkbox集合,並進行遍歷。實現代碼如下:

var results =[];
    var fileNameList=document.getElementsByName("fileName");
    var imageSrcList=document.getElementsByName("imageSrc");
    for (var i = 0; i <fileNameList.length ; i++) {
        var imageDefect={};
        var fileName=fileNameList[i].innerText;
        var inputName="checkbox"+i;
        var chechbox= document.getElementsByName(inputName);
        var checkvalue=[];
        for (var j = 0; j <chechbox.length ; j++) {
            if (chechbox[j].checked){
                checkvalue.push(chechbox[j].value);
            }
        }        
    }

三、封裝和請求

按照“圖片名-圖片信息-缺陷信息”進行封裝,然后利用ajax發出請求

封裝成json:
var row={};
        row.imageName=fileName;
        row.Defect=checkvalue;
        json.push(row);
ajax請求:
$.ajax({
        url:"save2Mysql",
        type:"post",
        data:data,
        dataType:"application/x-www-form-urlencoded",
        success:function (result){
            console.log("請求成功!");
        }
    })

 

 

附: 錯誤記錄

1,在利用ajax向servlet發出請求時,開始是get請求,然后運行時瀏覽器報了一個400的錯誤。網友普遍說道這是一個傳遞的參數類型不一致導致的controller層無法接受數據的問題。但是反復檢查之后,因為數據也是json格式的不應該出問題。

於是想到了ajax的兩種請求方式,get請求和post請求,get請求普遍是用在獲取數據,post請求普遍是用在提交數據。這里是想servlet發出請求,並提交數據,分析之后認為應該是post請求。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM