dataGrid中对于checkbox的操作:js原数组去除空值,复选框过滤disable

小豆丁 1年前 ⋅ 149 阅读

1、原数组去空:保留原有数组地址

(1)实现方法:保留数组地址

function removeEmpty(arr){
	for(var i = 0; i < arr.length; i++) {
		if(arr[i] == "" || typeof(arr[i]) == "undefined") {
			arr.splice(i,1);
			i = i - 1;
		}
	}
	return arr;
};

(2)使用场景:原数组去重

arr.splice(i,1);
i = i - 1;

(3)关键点解释: i = i - 1,arr.splice(i,1) 会删除一个数据,i的下表应该回退1

2、dataGrid中checkbox过滤disable

(1)dataGrid渲染,showCheckbox: true开启复选框

(2)实现方法:ajaxSuccess、onSelectRow、onSelectAll

	ajaxSuccess: function(data){
		$('#dataGrid input:checkbox').each(function(index,ck) {
			if (data.list[index].confirmState == 1) {
				let id = '#' + ck.getAttribute("id") + "";
				$(id).iCheck('disable');
			}
		})
	},
	onSelectRow: function(id, isSelect, event){
		let d = $("#dataGrid").jqGrid('getRowData',id);
		if (d.confirmState==1) {
			isSelect = false;
			$("#dataGrid").jqGrid('resetSelection',id);
		}

	},
	onSelectAll: function(ids, isSelect){
		$('#dataGrid input:checkbox').each(function(index,ck) {
			if (ck.disabled==true) {
				ck.checked = false;
				for (var i = 0; i < ids.length; i++) {
					if(ck.id.indexOf(ids[i])>0)
					{
						ids.splice(i,1);
						i = i - 1;
					}
				}
			}
		});
		if(ids.length==0){
			$("#dataGrid").jqGrid('resetSelection');
			js.showMessage("全部disable","操作提醒",4000);
		}

	}

(3)代码解析:

ajaxSuccess:加载完成时渲染,根据data属性条件标记disable数据行

onSelectRow:选择行时触发事件,取所选行数据属性作条件判断(与标记disable条件一致),识别是否看可选

onSelectAll:根据返回的ID数组,过滤,去除,余下的是需要选中的

(4)其他方法:禁止点击行勾选复选框

$("#dataGrid")
			.on('jqGridBeforeSelectRow', function(t, id, e){
				return $(e.target).hasClass('cbox');
			});

2、以上内容参考实现方案用于jeesite卓源后台管理的HTML

3、解决方法的参考来源:

(1)JqGrid选中行、取消选中行、获得选中行数据

(2)卓源jeesite前端文档


全部评论: 0

    我有话说: