123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- /**
- * yvan.yvgrid.selection.js
- * @author luoyifan
- * 2019-07-16
- */
- 'use strict';
- (function ($) {
- /**
- * 获取指定的行编号的对应数据
- * 如果不设置参数就获取当前或被选中的行数据
- */
- function getSelected($dom, rowIndex) {
- if ($.type(rowIndex) === 'undefined') {
- rowIndex = getSelectedRowIndex($dom);
- }
- return $dom.jqxGrid('getrowdata', rowIndex);
- }
- /**
- * 获取当前选中的行编号
- */
- function getSelectedRowIndex($dom) {
- return $dom.jqxGrid('selectedrowindex');
- //var state = $.data($dom[0], 'yvgrid');
- //var option = state.options;
- //return option.selectedRowId;
- }
- function onSelect(event, targetBoundIndex) {
- var $dom = $(this);
- //点击的列是__CB__ 就忽略
- if (event && event.args &&
- event.args.column &&
- event.args.column.datafield === '__CB__') {
- $.fn.yvgrid.selection.toggleCheckbox($dom, targetBoundIndex);
- return;
- }
- //检查跳转目标是否有效
- var data = getSelected.call(this, $dom, targetBoundIndex);
- if ($.type(data) === 'undefined' || $.type(data.boundindex) === 'undefined') {
- return;
- }
- var state = $.data($dom[0], 'yvgrid');
- var option = state.options;
- var oldIndex = getSelectedRowIndex($dom);
- if ($dom.yvgrid('isEditing') && oldIndex === targetBoundIndex) {
- //编辑中的表格,如果跳转目标与当前行一致,就取消跳转
- return;
- }
- //console.log('onSelect type:' + event.type + ', oldIndex:' + oldIndex + ', newIndex:' + targetBoundIndex);
- //如果是 bindingcomplete 事件(切换数据源)造成的切换行动作, 就不用检测是否允许跳转了
- if (event.type !== 'bindingcomplete') {
- //询问 edit 是否取消 select 动作
- var ret = $.fn.yvgrid.edit.beforeSelect.call(this, event, targetBoundIndex);
- if (ret === false) {
- return;
- }
- if ($.type(option.onBeforeSelect) === 'function') {
- //询问外部程序,是否取消 select 动作
- ret = option.onBeforeSelect.call(this, targetBoundIndex, oldIndex, event);
- if (ret === false) {
- return;
- }
- }
- }
- //跳转行
- $dom.jqxGrid('unselectrow', oldIndex);
- $dom.jqxGrid('selectrow', targetBoundIndex);
- $dom.jqxGrid('ensurerowvisible', targetBoundIndex);
- //通知跳转完毕
- if ($.type(option.onSelect) === 'function') {
- option.onSelect.call(this, targetBoundIndex, data, event);
- }
- if ($.type(option.onSelectRow) === 'function') {
- option.onSelectRow.call(this, targetBoundIndex, data, event);
- }
- }
- function hideCheckboxColumn(event) {
- if (!$(this).jqxGrid('editable')) {
- $(this).jqxGrid('hidecolumn', '_checkboxcolumn');
- }
- }
- $.extend($.fn.yvgrid.methods, {
- /**
- * 获取指定的行编号的对应数据
- * 如果不设置参数就获取当前或被选中的行数据
- */
- rowData: function($dom){
- return $dom.jqxGrid('getrows');
- },
- currentRowData: getSelected,
- getSelected: getSelected,
- /**
- * 获取当前选中的行编号
- */
- getSelectedRowIndex: getSelectedRowIndex,
- /**
- * 选择一行数据
- */
- selectRow: function (jq, rowIndex) {
- jq.each(function () {
- onSelect.call(this, { type: 'api' }, rowIndex);
- });
- },
- });
- $.fn.yvgrid.selection = {
- setCheckboxById: function ($dom, id, value) {
- var state = $.data($dom[0], 'yvgrid');
- if (!state) return;
- $dom.jqxGrid('setcellvaluebyid', id, "__CB__", value);
- var option = state.options;
- if ($.type(option.onCheckedChange) === 'function') {
- var row = $dom.jqxGrid('getrowdatabyid', id);
- if (row) {
- option.onCheckedChange.call($dom[0], id, value, row);
- }
- }
- },
- setCheckbox: function ($dom, targetBoundIndex, value) {
- var state = $.data($dom[0], 'yvgrid');
- if (!state) return;
- $dom.jqxGrid('setcellvalue', targetBoundIndex, "__CB__", value);
- var option = state.options;
- if ($.type(option.onCheckedChange) === 'function') {
- var id = $dom.jqxGrid('getrowid', targetBoundIndex);
- var row = $dom.jqxGrid('getrowdata', targetBoundIndex);
- if (row) {
- option.onCheckedChange.call($dom[0], id, value, row);
- }
- }
- },
- getCheckbox: function ($dom, targetBoundIndex) {
- return $dom.jqxGrid('getcellvalue', targetBoundIndex, "__CB__");
- },
- toggleCheckbox: function ($dom, targetBoundIndex) {
- var value = $.fn.yvgrid.selection.getCheckbox($dom, targetBoundIndex);
- if (value) {
- $.fn.yvgrid.selection.setCheckbox($dom, targetBoundIndex, false);
- } else {
- $.fn.yvgrid.selection.setCheckbox($dom, targetBoundIndex, true);
- }
- },
- handlekeyboardnavigation: function (event) {
- switch (event.keyCode) {
- case 33:
- case 34:
- if (event.keyCode === 33) {
- //page up
- } else if (event.keyCode === 40) {
- //page down
- }
- break;
- case 35:
- case 36:
- if (event.target.tagName === 'INPUT') {
- //输入框里面按下的 home/end 键忽略
- return;
- }
- case 38:
- case 40:
- var $dom = $(this.element);
- var rowindex = getSelectedRowIndex($dom);
- var vi = $dom.jqxGrid('getrowvisibleindex', rowindex);
- if (event.keyCode === 38) {
- //index--; //上
- vi--;
- } else if (event.keyCode === 40) {
- //index++; //下
- vi++;
- } else if (event.keyCode === 36) {
- //home
- vi = 0;
- } else if (event.keyCode === 35) {
- //end
- vi = $dom.jqxGrid('getdisplayrows').length - 1;
- }
- var boundIndex = $dom.jqxGrid('getrowboundindex', vi);
- onSelect.call(this.element, event, boundIndex);
- return true;
- }
- },
- gridOption: function ($dom, easyuiOpt, jqxOpt) {
- $.extend(jqxOpt, {
- selectionmode: 'checkbox'
- });
- delete jqxOpt.onBeforeSelect;
- delete jqxOpt.onSelect;
- delete jqxOpt.rownumbers;
- delete jqxOpt.loadComplete;
- $dom.on('initialized', function (event) {
- hideCheckboxColumn.call(this, event);
- });
- $dom.on('bindingcomplete', function (event) {
- hideCheckboxColumn.call(this, event);
- var $grid = $(this);
- if ($.type(easyuiOpt.loadComplete) === 'function') {
- easyuiOpt.loadComplete.call(this, arguments);
- }
- if (easyuiOpt.autoSizeColumns) {
- $grid.jqxGrid('autoresizecolumns', 'all');
- }
- if (easyuiOpt.rownumbers) {
- if (!easyuiOpt.editable) {
- $grid.jqxGrid('autoresizecolumn', '__NO__', 'all');
- }
- }
- if (easyuiOpt.checkbox) {
- $grid.jqxGrid('setcolumnproperty', '__CB__', 'width', 40);
- }
- var source = $grid.jqxGrid('source')._source;
- //默认选中第一行
- var newIndex = undefined;
- if (source.records) {
- source.records.every(function (item) {
- newIndex = item.boundindex;
- return false;
- });
- }
- if ($.type(newIndex) !== 'undefined') {
- onSelect.call(this, event, newIndex);
- }
- });
- $dom.on('cellclick', function (event) {
- onSelect.call(this, event, event.args.rowindex);
- });
- }
- };
- })(jQuery);
|