1. 程式人生 > >JQuery外掛之-----Datatables(三)Datatables實現多選框與AJAX返回資料

JQuery外掛之-----Datatables(三)Datatables實現多選框與AJAX返回資料

通過Eclipse建立一個簡單的Spring MVC專案,使用其內建的JSON轉換


在index.jsp檔案中新增如下內容:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>jquery datatables</title>

	<link rel="stylesheet" href="css/bootstrap.min.css">
    <link rel="stylesheet" type="text/css" href="css/jquery.dataTables.min.css">
    <link type="text/css" rel="stylesheet" href="css/dataTables.tableTools.css" />
    <link type="text/css" rel="stylesheet" href="css/dataTables.bootstrap.css" />
    
    
    <script type="text/javascript" src="js/jquery.js"></script>
    <script type="text/javascript" src="js/jquery.dataTables.min.js"></script>
    <script src="js/bootstrap.min.js"></script>
    
    <style>
.selected {
	background-color: #DFF0D8;
}

#example_length {
	float: left;
}

.odd td strong {
	color: red;
}

#deleteButton {
	float: left;
}

#addButton {
	float: left;
}

#topPlugin {
	float: left;
	margin-left: 10px;
}

.modal-footer span {
	font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
	float: left;
	font-size: 16px;
}

div.dataTables_paginate {
	margin: 0;
	white-space: nowrap;
	text-align: right;
	margin-top: 5px;
}

.table th, .table td { 
	text-align: center; 
	height:25px;
}
</style>
    
</head>
<body>

<div style="height:20px;"></div>

<!-- 顯示錶格邊框table-bordered  縮小表格間距table-condensed -->
	<table id="example" class="table table-bordered table-condensed">
		<thead>
		<tr>
		<th><input type="checkbox" name="allChecked" /></th>
	  	<th>id</th>
	  	<th>部門名稱</th>
	  	<th>操作</th>
	  </tr>
	  </thead>
	</table>



<!--單個刪除確認對話方塊-->
<div class="modal fade" id="deleteOneModal" tabindex="-1" role="dialog"
     aria-labelledby="myModalLabel" aria-hidden="true" > <!-- data-backdrop="static" 禁止點選彈框後面內容 -->
    <form class="form-horizontal" role="form">
        <div class="modal-dialog modal-sm " > <!-- modal-sm 小的  modal-lg 大的 -->
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close"
                            data-dismiss="modal" aria-hidden="true">
                        ×
                    </button>
                    <h4 class="modal-title" id="myModalLabel">
                        提示資訊
                    </h4>
                </div>
                <div class="modal-body" style="text-align: left;">
                    <h5>您確定要刪除當前資訊嗎?</h5>
                </div>
                <div class="modal-footer">
                <!-- 
                    <button type="button" class="btn btn-default"
                            data-dismiss="modal">取消
                    </button>
                     -->
                    <button type="button" class="btn btn-primary" id="delSubmit">
                        確認
                    </button>
                </div>
            </div><!-- /.modal-content -->
        </div>
    </form>
</div>


<!--多個刪除確認對話方塊-->
<div class="modal fade" id="deleteAllModal" tabindex="-1" role="dialog"
     aria-labelledby="myModalLabel" aria-hidden="true">
    <form class="form-horizontal" role="form">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close"
                            data-dismiss="modal" aria-hidden="true">
                        ×
                    </button>
                    <h4 class="modal-title" id="myModalLabel">
                        提示資訊
                    </h4>
                </div>
                <div class="modal-body" style="text-align: left;">
                    <h5>您確定要刪除選中資訊嗎?</h5>
                </div>
                <div class="modal-footer">
                <!-- 
                    <button type="button" class="btn btn-default"
                            data-dismiss="modal">取消
                    </button>
                     -->
                    <button type="button" class="btn btn-primary" id="delAllSubmit">
                        確認
                    </button>
                </div>
            </div><!-- /.modal-content -->
        </div>
    </form>
</div>



<!--新增頁面開始-->
<div class="modal fade" id="myModal-add-info" tabindex="-1" role="dialog"
                 aria-labelledby="myModalLabel" aria-hidden="true">
                <div class="modal-dialog">
                    <div class="modal-content">
                        <div class="modal-header">
                            <button type="button" class="close"
                                    data-dismiss="modal" aria-hidden="true">
                                ×
                            </button>
                            <h4 class="modal-title" id="myModalLabel">
                                新 增
                            </h4>
                        </div>
                        <form class="form-horizontal" role="form" action="/category_add" method="post"  id="category_add">
                            <div class="modal-body">
                            <%-- 
                                <div class="form-group">
                                    <label class="col-sm-3 control-label no-padding-right" >圖 片:</label>
                                    <div class="col-sm-5">
                                        <input  type="file" name="img1" class="file" id="img1"  style="width:180px; float: left" />
                                    </div>
                                    <div class="col-sm-3">
                                        <input class="btn btn-sm btn-info" type="button" value="上傳" id="uploadimg"/><span id="t"></span>
                                    </div>
                                    <input name="categoryImg" type="hidden" id="imageUrl" />
                                </div>
                                --%>
                                <div class="form-group">
                                    <label class="col-sm-3 control-label no-padding-right" >部門名稱: </label>

                                    <div class="col-sm-9">
                                        <input type="text"  class="form-control" id="typename"  name="name" style="width: 250px" maxlength="15" placeholder="10個漢字以內" />

                                    </div>
                                </div>


                                <div class="form-group">
                                    <label class="col-sm-3 control-label no-padding-right" >備註: </label>

                                    <div class="col-sm-9">
                                        <input type="text"   class=" sortNumber form-control"  name="sortNumber" id="sortNumber" style="width: 250px" maxlength="3"/>
                                    </div>
                                </div>
                   
                         
                                <div class="form-group">
                                    <label class="col-sm-3 control-label no-padding-right" >狀態:</label>
                                    <div class="control-group">
                                        <div class="radio col-sm-3" style="float: left">
                                            <label>
                                                <input  type="radio" class=" yn1" name="isYn"  value="1"  checked/>
                                                <span class="lbl">有效</span>
                                            </label>
                                        </div>
                                        <div class="radio col-sm-3" style="float: left">
                                            <label>
                                                <input  type="radio" class=" yn1" name="isYn"  value="0"/>
                                                <span class="lbl">無效</span>
                                            </label>
                                        </div>
                                    </div>
                                </div>
                            </div>
                            <div class="modal-footer">
                                <button type="button" class="btn btn-default"
                                        data-dismiss="modal">關閉
                                </button>
                                <button type="button" class="btn btn-primary" id="btnsubmit">提交
                                </button>
                            </div>
                        </form>
                    </div><!-- /.modal-content -->
                </div>
            </div>

<script>

$(function() {
	var table = $("#example").DataTable({
		"aLengthMenu":[10,20,40,60], //動態指定分頁後每頁顯示的記錄數。
		"searching":false,//禁用搜索
		"lengthChange":true, //是否啟用改變每頁顯示多少條資料的控制元件
		"sort" : "position",  //是否開啟列排序,對單獨列的設定在每一列的bSortable選項中指定
		"deferRender":true,//延遲渲染
		"bStateSave" : false, //在第三頁重新整理頁面,會自動到第一頁
		"iDisplayLength" : 10,  //預設每頁顯示多少條記錄
		"iDisplayStart" : 0,
		"ordering": false,//全域性禁用排序
		"dom": '<l<\'#topPlugin\'>f>rt<ip><"clear">',
		"ajax": {
                "type": "POST",
                "url":'<%=request.getContextPath()%>/datatables/listceshi.do',
        },
		"aoColumns" : [{  //aoColumns設定列時,不可以任意指定列,必須列出所有列。
			"mData" : "id",
			"orderable": false , // 禁用排序
			"sDefaultContent" : "",
			"sWidth" : "2%"
        },{
			"mData" : "id",
			"orderable" : false, // 禁用排序
			"sDefaultContent" : "",
			"sWidth" : "6%",
			
		}, {
			"mData" : "username",
			"orderable" : false, // 禁用排序
			"sDefaultContent" : "",
			"sWidth" : "10%"
		},{
			"mData" : "id",
			"orderable" : false, // 禁用排序
			"sDefaultContent" : '',
			"sWidth" : "10%",
		    "render":function(data, type, full, meta){  //render改變該列樣式,4個引數,其中引數數量是可變的。
		    return	data='<button id="deleteOne" class="btn btn-danger btn-sm" data-id='+data+'>刪 除</button>';
		    
		    }}
			//data指該行獲取到的該列資料
			//row指該行,可用row.name或row[2]獲取第3列欄位名為name的值
			//type呼叫資料型別,可用型別“filter”,"display","type","sort",具體用法還未研究
			//meta包含請求行索引,列索引,tables各引數等資訊
		
		],
		"columnDefs" : 
		[{
			"orderable" : false, // 禁用排序
			"targets" : [0], // 指定的列
			"data" : "id",
			"render" : function(data, type, full, meta) {
				return '<input type="checkbox" value="'+ data + '" name="id"/>';
			}
		}],
		"oLanguage" : { // 國際化配置
			"sProcessing" : "正在獲取資料,請稍後...",
			"sLengthMenu" : "顯示 _MENU_ 條",
			"sZeroRecords" : "沒有找到資料",
			"sInfo" : "從 _START_ 到  _END_ 條記錄 總記錄數為 _TOTAL_ 條",
			"sInfoEmpty" : "記錄數為0",
			"sInfoFiltered" : "(全部記錄數 _MAX_ 條)",
			"sInfoPostFix" : "",
			"sSearch" : "搜尋",
			"sUrl" : "",
			"oPaginate" : {
				"sFirst" : "第一頁",
				"sPrevious" : "上一頁",
				"sNext" : "下一頁",
				"sLast" : "最後一頁"
			}
		},
		initComplete:initComplete,
		drawCallback: function( settings ) {
	        $('input[name=allChecked]')[0].checked=false;//取消全選狀態
	    }
		
	});
	
	/**
     * 表格載入渲染完畢後執行的方法
     * @param data
     */
    function initComplete(data){

    	//刪除使用者按鈕的HTMLDOM
        var topPlugin='<button   class="btn btn-danger btn-sm" id="deleteAll">刪除</button> <button   class="btn btn-primary btn-sm addBtn" >新 增</button>' ;
					       
		$("#topPlugin").append(topPlugin);//在表格上方topPlugin DIV中追加HTML
    
    }
   
	
    /**
	 * 單行刪除按鈕點選事件響應
	 */

    $(document).delegate('#deleteOne','click',function() {
    	var id=$(this).data("id");
    	$("#delSubmit").val(id);
    	$("#deleteOneModal").modal('show');
 	   });
    
    
    /**
     * 點選確認刪除按鈕
     */
    $(document).delegate('#delSubmit','click',function(){
        var id=$(this).val();
        $('#deleteOneModal').modal('hide');
        $.ajax({
        	/* 後臺未實現 */
        	url:contextPath+"delete.do?id="+id,
            async:true,
            type:"GET",
            dataType:"json",
            cache:false,    //不允許快取
            success: function(data){
                var obj = eval(data);
                if(obj.code==1)
                {
                 
                    window.location.reload();
                }
                else
                {
                    alert("刪除失敗");
                }

            },
            error:function(data){
                alert("請求異常");
            }
        });
    });
    

	/**
	 * 多選選中和取消選中,同時選中第一個單元格單選框,並聯動全選單選框
	 */
	$('#example tbody').on('click', 'tr', function(event) {
		var allChecked=$('input[name=allChecked]')[0];//關聯全選單選框
		$($(this).children()[0]).children().each(function(){
			if(this.type=="checkbox" && (!$(event.target).is(":checkbox") && $(":checkbox",this).trigger("click"))){
				if(!this.checked){
					this.checked = true;
					addValue(this);
					var selected=table.rows('.selected').data().length;//被選中的行數
					console.info(selected+'個數');
					//全選單選框的狀態處理
					var recordsDisplay=table.page.info().recordsDisplay;//搜尋條件過濾後的總行數
					var iDisplayStart=table.page.info().start;// 起始行數
					if(selected === table.page.len()||selected === recordsDisplay||selected === (recordsDisplay - iDisplayStart)){
						allChecked.checked = true;
					}
				}else{
					this.checked = false;
					cancelValue(this);
					allChecked.checked = false;
				}
			}
		});
		$(this).toggleClass('selected');//放在最後處理,以便給checkbox做檢測
	});
	
	

	/**
	 * 全選按鈕被點選事件
	 */
	$('input[name=allChecked]').click(function(){
		if(this.checked){
			$('#example tbody tr').each(function(){
				console.info(1);
				if(!$(this).hasClass('selected')){
					$(this).click();
					console.info(2);
				}
			});
		}else{
			$('#example tbody tr').click();
		}
	});
    
	/**
	 * 單選框被選中時將它的value放入隱藏域
	 */
	function addValue(para) {
		var userIds = $("input[name=userIds]");
		if(userIds.val() === ""){
			userIds.val($(para).val());
		}else{
			userIds.val(userIds.val()+","+$(para).val());
		}
	}
	
	/**
	 * 單選框取消選中時將它的value移除隱藏域
	 */
	function cancelValue(para){
		//取消選中checkbox要做的操作
		var userIds = $("input[name=allChecked]");
		var array = userIds.val().split(",");
		userIds.val("");
		for (var i = 0; i < array.length; i++) {
			if (array[i] === $(para).val()) {
				continue;
			}
			if (userIds.val() === "") {
				userIds.val(array[i]);
			} else {
				userIds.val(userIds.val() + "," + array[i]);
			}
		}
	}
	
	
	   /**
	    * 新增
	    */
	   $(document).delegate('.addBtn','click',function() {
			  
			$('#myModal-add-info').modal('show');
		   });
	   
	   
	   /**
	    * 批量刪除
	    */
	   $(document).delegate('#deleteAll','click',function() {
		   var theArray=[];
		   $("input[name=id]:checked").each(function() { 
			      theArray.push($(this).val());
			    });
		   if(theArray.length<1){
			   alert("請至少選擇一個"); 
		   }else{
			   alert(theArray);
		   }
			 
		   });
	   
	   
	   
	   


});

</script>


</body>
</html>


建立控制類TestController.java和實體類Ceshi.java:

TestController.java

@RequestMapping("/datatables")
@Controller
public class TestController {
	
	
	@RequestMapping(value="/listceshi")
	@ResponseBody
	public Map<String, Object>  listjsonceshi(){
		 Map<String, Object> map = new HashMap<String, Object>();
		int count=20;
		List<Ceshi> list=new ArrayList<Ceshi>();
		for (int i = 0; i < 20; i++) {
			Ceshi ceshi=new Ceshi();
			ceshi.setId(i);
			ceshi.setUsername("小"+i);
			list.add(ceshi);
		}
		map.put("recordsTotal", count);
	    map.put("recordsFiltered", count);
	    map.put("aaData", list);
		return map;
	}
	
	
}


Ceshi.java

public class Ceshi {
	
	private int id;

 	private String username;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

 	
 	
}


訪問: http://localhost:8080/SpringMVC_datatables/index.jsp

效果為:



全選刪除


單個刪除