1. 程式人生 > >easyui-datagrid點選下一頁直接跳轉到最後一頁的可能原因

easyui-datagrid點選下一頁直接跳轉到最後一頁的可能原因

今天接到一個bug:初次進入頁面easyui-datagrid加載出第一頁的資料,點選下一頁的時候不是到第二頁而是到最後一頁。

如下圖所示:



 

這個bug確實讓我很鬱悶,最初以為是後臺的問題,除錯了一會兒發現跟後臺沒關係。

隨後檢查了下js程式碼,我的datagrid js是這樣寫的:

$('#xxTable').datagrid({
		pageNumber : $("#pageNo").val(),
		loadMsg:'資料載入中,請稍後...',
		pageList:[10], //設定每頁顯示多少條
		//查詢條件
		queryParams:{
			"userName":userName,
			"startTime":startTime,
			"endTime":endTime,
			"conditionDto_levelId":conditionDto_levelId,
			"conditionDto_stateId":conditionDto_stateId,
			"companyName":companyName,
		},
		onLoadError:function(){
			alert('資料載入失敗!');
		},
		onClickRow:function(rowIndex, rowData){
			//取消選擇某行後高亮
			$('#infoMemberTable').datagrid('unselectRow', rowIndex);
		},
		onLoadSuccess:function(){
			//儲存當前頁碼到hidden標籤中
                                setPageNumber();
		}
	}).datagrid('acceptChanges') ;

     上面datagrid的pageNumber是從hidden標籤中取得值,經過alert($("#pageNo").val()),初次進入頁面時,彈出的值確實是“1”。(注:之所以pageNumber : $("#pageNo").val()是為了保護使用者輸入)。

     找了半天沒結果,我索性把pageNumber : $("#pageNo").val()改成pageNumber : 1,結果讓我大跌眼鏡:bug消失了!

     我非常納悶:pageNumber : $("#pageNo").val()向後臺傳的值是1,而pageNumber : 1向後臺傳的值也是1,兩者完全沒區別,但為什麼後者點下一頁就不會跳到最後一頁呢?

    最後經過同事提醒:是不是js資料型別問題。我隨後把程式碼改成這樣:pageNumber : parseInt($("#pageNo").val())。ok,bug消失了,原來$("#pageNo").val()是一個萬惡的字串“1”,pageNumber只接收整數,無法識別字符串沒結果造成了剛才的問題。

     經過上面的排查,我大概猜想easyui的整個執行過程:

     第一次向後臺傳送請求時,datagrid會獲取pageNumber中的值,並且把pageNumber的值儲存起來。

     使用者點選下一頁的時候,datagrid會使pageNumber+1然後把資料向後臺傳送,但是正如上面所說:如果遇到$("#pageNo").val()存的是一個字串“1”,結果“1”+1會是一個字串而不是一個整數,此時datagrid沒法識別,就選擇獲得最後一頁的資料。