上次關於的這個問題的處理通常是沒有問題,可是若是對於重複調用datagrid的selectRow和clearSelections事件,會形成顏色的混亂,由於在每次調用onSelect函數的時候,都首先會調用 onUnselectAll函數,並且調用clearSelections方法的時候,也會調用onUnselectAll函數,後面花了些時間找到這個解決辦法:css
定義全局變量,用來存儲當前被選中行,上次被選中和顏色的一個對象,該對象的key爲行的ID值,value值爲顏色的值函數
var selectRowIndexColor = {};//用來保存行的背景色(由於表格中可能有多個背景色) var selectRowIndex = undefined;//保存當前正在選中的行的索引 var prevSelectRow = undefined;//用來保存上次被選中的行
datagrid的選中行事件:code
onSelect:function(rowData){ if(rowData){ var rowIndex = rowData.id;//這裏使用的是treegrid,treegrid和datagrid的不一樣只是用id值替換了datagrid的索引index selectRowIndex = rowIndex; //獲取被選中行的背景色(等下取消選擇的時候須要還原爲這個背景色,因此這裏先記錄下來),在treegrid中使用rowData.id代替了rowIndex的做用 var color = $("#datagrid-row-r1-2-"+rowIndex).css("background-color"); //datagrid的行選中默認顏色rgb(255, 228, 141) if(color != 'rgb(255, 228, 141)'){ //若是設置了自定義背景色,才須要改變(若是沒有設置自定義背景色,datagrid會使用默認的選中行的背景色) selectRowIndexColor[selectRowIndex] = color; // $("#datagrid-row-r1-1-"+rowIndex).css("background-color","#FFE48D").css("color","black");//背景改成選中 $("#datagrid-row-r1-2-"+rowIndex).css("background-color","#FFE48D").css("color","black");//背景改成選中 }; //若是上次被選中的行存在,並且上次被選中的行不是當前被選中的行(針對非鼠標單擊,而調用的select選中行事件) if(prevSelectRow && prevSelectRow.id != selectRowIndex){ var color = selectRowIndexColor[prevSelectRow.id]; if(color){ //若是設置了自定義背景色,才須要恢復原來的自定義背景色 // $("#datagrid-row-r1-1-"+selectRowIndex).css("background-color",color).css("color","black");//背景恢復原來顏色 $("#datagrid-row-r1-2-"+prevSelectRow.id).css("background-color",color).css("color","black");//背景恢復原來顏色 }; }; prevSelectRow = rowData; }; },
而對於原來的onUnselectAll函數,則什麼都不須要作:對象
onUnselectAll:function(rows){ },