Bootstrap Table 行内编辑

Bootstrap Table 行内编辑(无弹窗,支持文本、下拉框,直接保存)

最近用到了bootstrap table的行内编辑,自带的编辑功能会弹出一个对话框,操作起来很不顺手,参照了 bootstrapTable 实现指定字段行内编辑,无弹窗,自动保存,加上自己改良了改了一部分,实现双击修改列表中内容,实现行内编辑。
效果图:
文本内容
下拉框

首先定义了一个全局变量options,初始化函数里设置变量值,即需要行内编辑的字段和编辑类型(目前只有text和select两种)

$(function () {
//行内编辑的单元格及编辑方式 text:文本 select:列表 方式为select时,写明列表值域
	options = [{editField : "RES_TYPE_NAME",
				editType : "select",
				editRange : "RES_TYPE"},
			   {editField : "RES_REMARK",
				editType : "text",
				editRange : ""}];
});

在bootstrap table初始化时,js代码$("#bootstraptable").bootstrapTable{}中,设定双击单元格事件(可以根据需求,改成单击单元格事件)

onDblClickCell : function(field,value,row,$element){
        	//避免重复编辑,如果inputCell已经存在,不做处理
        	if($("#inputCell").length>0){
        		return null;
        	}
        	var upIndex = $element[0].parentElement.rowIndex -1;
        	//获取单元格宽度,不然样式有点怪
        	var witdh = $element[0].clientWidth-16;
        	//循环字段
        	options.forEach(function(option){
        		if(field == option.editField){
        			//text类型直接添加一个input,然后绑定blur事件,焦点离开时触发保存操作
        			if("text" == option.editType){
        				$element[0].innerHTML="<input id='inputCell' type='text' name='inputCell' style ='width:"+witdh+"px;padding:0;' value='"+value+"'>";
        		        $("#inputCell").focus();
        		        $("#inputCell").blur(function(){
        		            var newValue = $("#inputCell").val();
        		            row[field] = newValue;
        		            $(this).remove();
        		            objTable.bootstrapTable('updateCell', {
        		                index: upIndex,
        		                field:field,
        		                value: newValue
        		            });
        		            //保存数据
        		            saveCellChange(row, field);
        		        });
        			}
        			//select类型拼接了一个select块(尝试使用combobox,但绑定不了blur事件,很苦恼,只能退而求其次),然后绑定blur事件,焦点离开时触发保存操作
        			else if("select" == option.editType){
        				var selectHtml = "<select id='inputCell' style ='width:"+witdh+"px'>";
        				var options = getOptions(option.editRange,value);
        				selectHtml = selectHtml + options + "</select>";
        				$element[0].innerHTML = selectHtml;
        		        $("#inputCell").focus();
        		        $("#inputCell").blur(function(){
        		        	var newValue = $('#inputCell option:selected').text();
        		        	row[field] = newValue;
        		            $(this).remove();
        		            objTable.bootstrapTable('updateCell', {
        		                index: upIndex,
        		                field:field,
        		                value: newValue
        		            });
        		            //保存数据
        		            saveCellChange(row, field);
        		        })
        			}
        	    }
        	})
        }

获取options的函数

function getOptions(range, defaultValue){
	var rangeList = "";
	var rangeResult = callHttpService("test", "getRangelistByCode", range);
	for(var i=0;i<rangeResult.length;i++){
		if(defaultValue == rangeResult[i].NAME){
			rangeList += "<option value='"+rangeResult[i].CODE+"' selected='selected'>"+rangeResult[i].NAME+"</option>";
		}else{
			rangeList += "<option value='"+rangeResult[i].CODE+"'>"+rangeResult.NAME+"</option>";
		}	
	}
	return rangeList;
}

保存数据函数

//这里只是随便写了个alert,验证进入到保存数据的操作中
function saveCellChange(row, field){
	alert(row[field]);
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值