JqGrid 是一款非常優秀的 jQuery 插件,可以方便地實現表格數據的展示、分頁、排序、搜索等功能。而其中的多選功能也是我們經常需要用到的,下面我們來介紹一下如何使用 JqGrid 實現多選功能。
1. 首先,我們需要在 JqGrid 的 colModel 中定義一個名為 “cb” 的列,用于顯示多選框。其格式如下:
{ name: 'cb', index: 'cb', width: 30, align: 'center', formatter: function (cellvalue, options, rowObject) { return ''; } }
上面的代碼中,我們通過 formatter 函數返回了一個多選框,并且把當前行的 id 值當作 value 值綁定到了多選框上,這樣在后面選擇多選框時可以方便地獲取到相應的 id。
2. 接著,我們需要在 JqGrid 的 beforeSelectRow 事件中處理多選框的選中狀態,其格式如下:
beforeSelectRow: function (rowid, e) { var $target = $(e.target); if ($target.hasClass('select-checkbox')) { var selectedIds = $('#grid').jqGrid('getGridParam', 'selarrrow'); var rowId = $.jgrid.stripPref($('#grid').attr('id'), rowid); if ($target.is(':checked')) { selectedIds.push(rowId); } else { selectedIds.splice(selectedIds.indexOf(rowId), 1); } $('#grid').jqGrid('setGridParam', { selarrrow: selectedIds }); } return true; }
上面的代碼中,我們首先判斷觸發事件的元素,如果是多選框,則處理選中狀態。接著我們通過 selarrrow 方法獲取當前頁面已選中的行,并且通過 stripPref 方法獲取 rowid 中的真實行號。然后根據多選框的狀態,更新 selectedIds 數組并調用 setGridParam 方法,最后返回 true 表示繼續觸發 selectRow 事件。
3. 最后,我們可以添加一個選擇全部的按鈕,方便用戶全選或全不選。其格式如下:
$('#select-all').on('click', function () { var $checkboxs = $('.select-checkbox'); $checkboxs.prop('checked', !($checkboxs.filter(':checked').length === $checkboxs.length)).trigger('click'); });
上面的代碼中,我們綁定了一個 click 事件,通過選擇器獲取所有的多選框,并且根據已選中的數量與總數的比較判斷當前狀態,最后觸發 click 事件來讓 beforeSelectRow 事件處理選中狀態。
下一篇jquery li拖拽