bootstrapTable嵌套input,实现上下左右和tab键切换

封装组件js-----keyDown.js

$(function(){
	var table = {
	    size: $("#size").val()
	};

	var inputnum = 0; 
	// 键盘事件 
	document.onkeydown = function(event){
		// 兼容 Mozilla Firefox 
		if (null == event) { 
			event = window.event; 
		} 
		else if ((event.keyCode <= 40 && event.keyCode >= 37) || event.keyCode == 9) { 
			keyinput(event); 
		} 
	} 
	// 实现切换功能主要代码 
	function keyinput(event){
		var target = event.target;
		var len = Number(table.size);
		if(target.localName == 'select'){
			event.preventDefault();
		}
		var inputnum = Number($(target).attr("data-val"));
		var key = event.keyCode;
		// 左 
		if (key == 37) { 
			--inputnum; 
		} 
		// 右 
		else if (key == 39) { 
			++inputnum; 
		} 
		// 上 
		else if (key == 38) { 
			inputnum = inputnum - len; 
		} 
		// 下 
		else if (key == 40) { 
			inputnum = inputnum + len;
		} 
		// Tab
		else if(key == 9){
			++inputnum;
		}
		getPoint(inputnum);
	}
	function getPoint(inputnum){
		setTimeout(function(){
			if($("[data-val='"+inputnum+"']").length > 0){
				document.getElementById($("[data-val='"+inputnum+"']").attr("id")).focus();
				$("[data-val='"+inputnum+"']").focus();
				//document.getElementById($("[data-val='"+inputnum+"']").attr("id")).setSelectionRange($("[data-val='"+inputnum+"']").val().length, $("[data-val='"+inputnum+"']").val().length);
				document.getElementById($("[data-val='"+inputnum+"']").attr("id")).select();
			}
		},0);
	}
})	

示例代码:

<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
    <th:block th:include="include :: header('')" />
    <style type="text/css">
    	.table-hover>tbody>tr:hover {
		    background-color: #fff !important;
		}
		.form-control {
			width: 100px
		}
    </style>
</head>
<body class="white-bg">
    <div class="table-box" style="margin: 20px;">
    <div id="toolbar">
        <button id="button" class="btn btn-default">新增行</button>
        <button id="deleteRow" class="btn btn-default">删除行</button>
    </div>
    <input type="hidden" value="12" id="size"/>
    <table id="table"></table>
</div>
<th:block th:include="include :: footer" />
<script th:src="@{/js/keyDown.js}"></script>
<script th:inline="javascript">
	var prefix = ctx + "payOil/payOilCount";
	var changeId = [[${changeId}]];
	var oilDatas = [[${@dict.getType('oil_type')}]];
	var salesDatas = [[${@dict.getType('sales_type')}]];
	var isEdit = [[${isEdit}]];
	
	$(function() {
	    let $table = $('#table');
	    let $button = $('#button');
	    let $deleteRow = $('#deleteRow');
	    let $getTableData = $('#getTableData');
		
	    $button.click(function() {
	    	var row=
            {
    			oilType: '92',
            	fuelType:'汽油',
            	goWordCount: '',
            	backTankCount: '',
            	backTankNumber: '',
            	payOilCount: '',
            	payOilCash: '',
            	payOilIccard: '',
            	//payOilAggregate: '',
            	price: '',
            	cashAmount: '',
            	iccardAmount: '',
            	aggregateAmount: ''
            };
	        //append  追加到最后一行
	        //prepend  新增到第一行
	        $table.bootstrapTable('append', row);
	        //更新行数据
	        $table.bootstrapTable('updateRow',row);
	        //定位到最后一行
	        $table.bootstrapTable('scrollTo', 'bottom');
	        /* $table.bootstrapTable('insertRow', {
	            index: 0,
	            row: {
	            	oilType: '92',
	            	fuelType:'汽油',
	            	goWordCount: '',
	            	backTankCount: '',
	            	backTankNumber: '',
	            	payOilCount: '',
	            	payOilCash: '',
	            	payOilIccard: '',
	            	payOilAggregate: '',
	            	price: '',
	            	amount: ''
	            }
	        }); */
	    });
	    
	    $deleteRow.click(function() {
	    	var rows = $table.bootstrapTable('getSelections');//获取选中行
            if (rows.length == 0) {
                layer.msg("请选择要删除的数据");
                return;
            }
            var indexs = [];
            var ids = [];
            for(var i = 0;i < rows.length;i++){
                indexs[i] = rows[i].index;
                if(rows[i].id != null){
                	ids[i] = rows[i].id;
                }
            }
			//删除
            $table.bootstrapTable('remove', {
                field:'index',
                values:indexs
            });
			if(ids.length > 0){
				ids = ids.join();
				$.post(prefix + "/remove",{"ids":ids},function(data){
					layer.msg("删除成功!");
				})
			}
	    });
	
	    $table.bootstrapTable({
	    	url: prefix + '/list?changeId=' + changeId,
	        toolbar: '#toolbar',
	        clickEdit: false,
	        showToggle: false,
	        pagination: false,       //显示分页条
	        showColumns: false,
	        showPaginationSwitch: false,     //显示切换分页按钮
	        showRefresh: false,      //显示刷新按钮
	        striped: false,
	        //clickToSelect: true,  //点击row选中radio或CheckBox
	        columns: [
		        [
		        	{
	                    checkbox: true,
	                    rowspan: 2,
	                    valign: 'middle', halign: "center", align: 'center'
	                },
		        	{
	                    field: 'index',
	                    title: '序列',
	                    rowspan: 2,
	                    width: '10px',
	                    formatter:function(value, row, index) {
	                        return row.index = index+1; //返回行号
	                    },
	                    valign: 'middle', halign: "center", align: 'center',
	                },
		            {
		                field: 'oilType',
		                title: '品种',
		                rowspan: 2,
		                valign: 'middle', halign: "center", align: 'center',
		                width: '100px',
		                formatter: function(value,row,index){
		                	var len = Number($("#size").val()) - 1;
		                	var result = "<select class='form-control' data-val='"+(index + 1 + index * len + 0)+"' id='"+index+"oilType' onchange='getValues("+index+")'>";
		                	if(!isEdit){
		                		result = "<select disabled='disabled' class='form-control' id='"+index+"oilType' onchange='getValues("+index+")'>";
		                	}
		                	for(var i = 0; i < oilDatas.length; i++){
		                		var oil = oilDatas[i];
		                		if(value == oil.dictValue){
		                			result += "<option value='"+oil.dictValue+"' selected='selected'>"+oil.dictLabel+"</option>";
		                		}else {
		                			result += "<option value='"+oil.dictValue+"'>"+oil.dictLabel+"</option>";
		                		}
		                	}
		                	result += "</select>";
	                        return result;
	                    }
		            },
		            {
		                field: 'fuelType',
		                title: '燃油类型',
		                rowspan: 2,
		                valign: 'middle', halign: "center", align: 'center',
		                width: '80px',
		                formatter: function(value,row,index){
		                	var len = Number($("#size").val()) - 1;
		                	var result = "<select class='form-control' data-val='"+(index + 1 + index * len + 1)+"' id='"+index+"fuelType' onchange='getValues("+index+")'>";
		                	if(!isEdit){
		                		result = "<select disabled='disabled' class='form-control' id='"+index+"fuelType' onchange='getValues("+index+")'>";
		                	}
		                	var oilType = row.oilType;
		                	var fuelType = "";
		                	if(oilType == "92" || oilType == "95" || oilType == "98"){
	                			fuelType = "汽油"; 
	                		}
	                		if(oilType == "0" || oilType == "-10" || oilType == "-20"){
	                			fuelType = "柴油"; 
	                		}
	                		if(oilType == "尿素"){
	                			fuelType = "非油"; 
	                		}
		                	for(var i = 0; i < salesDatas.length; i++){
		                		var sales = salesDatas[i];
		                		if(fuelType == sales.dictValue){
		                			result += "<option value='"+sales.dictValue+"' selected='selected'>"+sales.dictLabel+"</option>";
		                		}else {
		                			result += "<option value='"+sales.dictValue+"'>"+sales.dictLabel+"</option>";
		                		}
		                	}
		                	result += "</select>";
	                        return result;
	                    }
		            },
		            {
		                field: 'goWordCount',
		                title: '走字总数',
		                rowspan: 2,
		                valign: 'middle', halign: "center", align: 'center',
		                width: '100px',
		                formatter: function(value,row,index){
		                	var len = Number($("#size").val()) - 1;
	                        var result ="<input id='"+index+"goWordCount' data-val='"+(index + 1 + index * len + 2)+"' autocomplete='off'" +
	                            "class='form-control' style='width:100%' value='"+((value == undefined)?'':value)+"' onblur='getValues("+index+")'>";
	                        if(!isEdit){
	                        	result ="<input disabled='disabled' id='"+index+"goWordCount' autocomplete='off'" +
	                            "class='form-control' style='width:100%' value='"+((value == undefined)?'':value)+"' onblur='getValues("+index+")'>";
		                	}
                            return result;
	                    }
		            },
		            {
		                title: '回罐',
		                colspan: 2,
		                align: 'center', valign: 'middle', halign: "center", align: 'center'
		            },
		            {
		                title: '付油数量(升)',
		                colspan: 3,
		                align: 'center', valign: 'middle', halign: "center", align: 'center'
		            },
		            {
		                field: 'price',
		                title: '单价',
		                rowspan: 2,
		                width: '100px',
		                valign: 'middle', halign: "center", align: 'center',
		                formatter: function(value,row,index){
		                	var len = Number($("#size").val()) - 1;
	                        var result ="<input id='"+index+"price' " +
	                            "class='form-control' autocomplete='off' data-val='"+(index + 1 + index * len + 8)+"' value='"+((value == undefined)?'':value)+"' onblur='getValues("+index+")'>";
	                        if(!isEdit){
	                        	result ="<input disabled='disabled' id='"+index+"price' autocomplete='off'" +
	                            "class='form-control' value='"+((value == undefined)?'':value)+"' onblur='getValues("+index+")'>";
		                	}
                            return result;
	                    }
		            },
		            {
		                title: '金额',
		                colspan: 3,
		                align: 'center', valign: 'middle', halign: "center", align: 'center'
		            }
		        ],
	            [
	            	{
	            		field: 'backTankCount',
	            		title: '数量',
	            		valign: 'middle', halign: "center", align: 'center',
	            		width: '100px',
		                formatter: function(value,row,index){
		                	var len = Number($("#size").val()) - 1;
	                        var result ="<input id='"+index+"backTankCount' data-val='"+(index + 1 + index * len + 3)+"' autocomplete='off'" +
	                            "class='form-control' value='"+((value == undefined)?'':value)+"' onblur='getValues("+index+")'>";
	                        if(!isEdit){
	                        	result ="<input disabled='disabled' id='"+index+"backTankCount' autocomplete='off'" +
	                            "class='form-control' value='"+((value == undefined)?'':value)+"' onblur='getValues("+index+")'>";
		                	}
                            return result;
	                    }
	            	},
	            	{
	            		field: 'backTankNumber',
	            		title: '罐号',
	            		valign: 'middle', halign: "center", align: 'center',
	            		width: '100px',
		                formatter: function(value,row,index){
		                	var len = Number($("#size").val()) - 1;
	                        var result ="<input id='"+index+"backTankNumber' data-val='"+(index + 1 + index * len + 4)+"' autocomplete='off'" +
	                            "class='form-control' value='"+((value == undefined)?'':value)+"' onblur='getValues("+index+")'>";
	                        if(!isEdit){
	                        	result ="<input disabled='disabled' id='"+index+"backTankNumber' autocomplete='off'" +
	                            "class='form-control' value='"+((value == undefined)?'':value)+"' onblur='getValues("+index+")'>";
		                	}
                            return result;
	                    }
	            	},
	            	{
	            		field: 'payOilCount',
	            		title: '合计',
	            		valign: 'middle', halign: "center", align: 'center',
	            		width: '100px',
		                formatter: function(value,row,index){
		                	var len = Number($("#size").val()) - 1;
	                        var result ="<input id='"+index+"payOilCount' data-val='"+(index + 1 + index * len + 5)+"' autocomplete='off'" +
	                            "class='form-control' value='"+((value == undefined)?'':value)+"' onblur='getValues("+index+")'>";
	                        if(!isEdit){
	                        	result ="<input disabled='disabled' id='"+index+"payOilCount' autocomplete='off'" +
	                            "class='form-control' value='"+((value == undefined)?'':value)+"' onblur='getValues("+index+")'>";
		                	}
                            return result;
	                    }
	            	},
	            	{
	            		field: 'payOilCash',
	            		title: '现金',
	            		valign: 'middle', halign: "center", align: 'center',
	            		width: '100px',
		                formatter: function(value,row,index){
		                	var len = Number($("#size").val()) - 1;
	                        var result ="<input id='"+index+"payOilCash' data-val='"+(index + 1 + index * len + 6)+"' autocomplete='off'" +
	                            "class='form-control' value='"+((value == undefined)?'':value)+"' onblur='getValues("+index+")'>";
	                        if(!isEdit){
	                        	result ="<input disabled='disabled' id='"+index+"payOilCash' autocomplete='off'" +
	                            "class='form-control' value='"+((value == undefined)?'':value)+"' onblur='getValues("+index+")'>";
		                	}
                            return result;
	                    }
	            	},
	            	{
	            		field: 'payOilIccard',
	            		title: 'IC卡',
	            		valign: 'middle', halign: "center", align: 'center',
	            		width: '100px',
		                formatter: function(value,row,index){
		                	var len = Number($("#size").val()) - 1;
	                        var result ="<input id='"+index+"payOilIccard' data-val='"+(index + 1 + index * len + 7)+"' autocomplete='off'" +
	                            "class='form-control' value='"+((value == undefined)?'':value)+"' onblur='getValues("+index+")'>";
	                        if(!isEdit){
	                        	result ="<input disabled='disabled' id='"+index+"payOilIccard' autocomplete='off'" +
	                            "class='form-control' value='"+((value == undefined)?'':value)+"' onblur='getValues("+index+")'>";
		                	}
                            return result;
	                    }
	            	},
	            	/* {
	            		field: 'payOilAggregate',
	            		title: '聚合',
	            		valign: 'middle', halign: "center", align: 'center',
	            		width: '100px',
		                formatter: function(value,row,index){
	                        var result ="<input id='"+index+"payOilAggregate'" +
	                            "class='form-control' value='"+((value == undefined)?'':value)+"' onblur='getValues("+index+")'>";
	                        return result;
	                    }
	            	}, */
	            	{
		                field: 'cashAmount',
		                title: '现金金额',
		                width: '100px',
		                valign: 'middle', halign: "center", align: 'center',
		                formatter: function(value,row,index){
		                	var len = Number($("#size").val()) - 1;
	                        var result ="<input id='"+index+"cashAmount' data-val='"+(index + 1 + index * len + 9)+"' autocomplete='off'" +
	                            "class='form-control' value='"+((value == undefined)?'':value)+"' onblur='getValues("+index+")'>";
	                        if(!isEdit){
	                        	result ="<input disabled='disabled' id='"+index+"cashAmount' autocomplete='off'" +
	                            "class='form-control' value='"+((value == undefined)?'':value)+"' onblur='getValues("+index+")'>";
		                	}
                            return result;
	                    }
		            },
		            {
		                field: 'iccardAmount',
		                title: 'IC卡金额',
		                width: '100px',
		                valign: 'middle', halign: "center", align: 'center',
		                formatter: function(value,row,index){
		                	var len = Number($("#size").val()) - 1;
	                        var result ="<input id='"+index+"iccardAmount' data-val='"+(index + 1 + index * len + 10)+"' autocomplete='off'" +
	                            "class='form-control' value='"+((value == undefined)?'':value)+"' onblur='getValues("+index+")'>";
	                        if(!isEdit){
	                        	result ="<input disabled='disabled' id='"+index+"iccardAmount' autocomplete='off'" +
	                            "class='form-control' value='"+((value == undefined)?'':value)+"' onblur='getValues("+index+")'>";
		                	}
                            return result;
	                    }
		            },
		            {
		                field: 'aggregateAmount',
		                title: '聚合金额',
		                width: '100px',
		                valign: 'middle', halign: "center", align: 'center',
		                formatter: function(value,row,index){
		                	var len = Number($("#size").val()) - 1;
	                        var result ="<input id='"+index+"aggregateAmount' data-val='"+(index + 1 + index * len + 11)+"' autocomplete='off'" +
	                            "class='form-control' value='"+((value == undefined)?'':value)+"' onblur='getValues("+index+")'>";
	                        if(!isEdit){
	                        	result ="<input disabled='disabled' id='"+index+"aggregateAmount' autocomplete='off'" +
	                            "class='form-control' value='"+((value == undefined)?'':value)+"' onblur='getValues("+index+")'>";
		                	}
                            return result;
	                    }
		            }
	            ]
	    	],
	        onLoadSuccess: function(data){
	        	if(data.total == 0){
	        		$table.bootstrapTable('insertRow', {
		    	        index: 0,
		    	        row: {
		    	        	oilType: '',
		    	        	fuelType:'',
		    	        	goWordCount: '',
		    	        	backTankCount: '',
		    	        	backTankNumber: '',
		    	        	payOilCount: '',
		    	        	payOilCash: '',
		    	        	payOilIccard: '',
		    	        	//payOilAggregate: '',
		    	        	price: '',
		    	        	cashAmount: '',
		                	iccardAmount: '',
		                	aggregateAmount: ''
		    	        }
		    	    });
	        	}
	        }
	    });
	});
	function submitHandler() {
		let $table = $('#table');
	    $.operate.save(prefix + "/add", "payOilArray=" + JSON.stringify($table.bootstrapTable('getData')) + "&changeId=" + [[${changeId}]]);
	}
	function getValues(index) {
	   
	}
</script>
</body>
</html>

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wengelovelian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值