最近在写后台开发的时候遇见一个小问题,可以说很苦恼了,主要是对前端开发不熟,尤其是DOM的操作还有动态绑定事件、提交操作,就是前端GET到一串JSON动态生成了一个table表,然后点击一个编辑按钮或者链接,解锁这一行,然后用户修改这一行,点击提交完成POST。功能很好描述,但是实际上要分为以下两步:

(1)选中哪一行就要把哪一行的tb里面加入input标签,然后input标签的value赋值原来的值

(2)点击提交后获取该行每一个input值,与数据库里的字段一一对应,然后提交

效果如图:

JavaScrpit-table提交单独行

我操作这个table的时候耗费了很多脑细胞,而且现在再让我操作这样的表单提交,我都很恐惧,因为我写的代码真的很烧脑。我实现的思路是在table加入了一个ID,写了一个函数,当动态生成<td>的时候,给最右边的编辑<a>加上一个onlcik函数,只传一个值,传这是第几行,比如这是第二行changeToInputA(2)就是传2,然后这个函数,会用table的ID获取到整个table,一行行算table之后,定位到这一行,给这一行加入input,并把原来的“编辑”替换为“完成”,给完成<a>标签加上一个onlick函数,点击完成时,提交该行输入的内容,效果是可以实现,但是过程非常曲折,因为整个函数只获得了第几行的编号这一个值,然后table根据ID获取整个table才进行计算,非常艰辛了。

看代码吧:

/**
 * caeser
 * 20190409
 */
$(function(){
	var getAddressOtUrl='/enterpriseportal/frontend/getaddressot';//分公司
	var getAddressUrl='/enterpriseportal/frontend/getaddress?addid=';//主公司
	var outHtml1='<tr><th>编号</th><th>名称</th><th>地址</th><th>联系人</th><th>电话</th><th>编辑</th></tr><tr>';
	var outHtml2='';
	$.getJSON(getAddressOtUrl,function(data){
		var newsObj=data.addList;
		var numa=1;
		newsObj.map(function(item,data){
			outHtml2+='<tr><td>'+numa+'</td><td>'+item.addName+'</td><td>'+item.addContent+'</td><td>'+item.addPhoneOwner+'</td><td>'+item.addPhoneNumber+'</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#" onclick="changeToInput('+numa+')" >编辑</a></td></tr>';
			numa++;
		});//
		$('#hr-part').html(outHtml1+outHtml2);
		$('#func-tab').html('<div class="blue"><div id="slatenav"><ul><li><a href="#" >新增地址</a></li></ul></div></div>');
	});
})
function changeToInput(id){
	id=id+1;
	var ROW_NUM=4;
			var oneRow=document.getElementById('hr-part').rows[id].cells;
			var b=(id-2)*ROW_NUM+1;
			var updateAddressUrl='/enterpriseportal/addresscc/updateadress';
			for(var a=0;a<oneRow.length-2;a++){
				var inputHtmlLength='80px';
				if((a+1)==2){
					inputHtmlLength='230px';
				}
				oneRow[a+1].innerHTML='<input value="'+oneRow[a+1].innerHTML+'" style="width:'+inputHtmlLength+'" id="upTableRow'+(b++)+'" type="text">';
			}
			oneRow[oneRow.length-1].innerHTML='<a href="#" id="finish'+id+'" >完成</a>';
			document.getElementById('finish'+id).onclick=function(){
				var fixNum=(id-2)*4+1;
				var formData=new FormData();
				for(var d=1;d<5;d++){
					var tmpC=document.getElementById('upTableRow'+fixNum).value;
					formData.append('inputC'+d,tmpC);
					fixNum++;
				}
				formData.append('id',id+2);//当前分公司地址前面还有三条信息
				$.ajax({
					url : updateAddressUrl,
					type : 'POST',
					data : formData,
					contentType : false,
					processData : false,
					cache : false,
					success : function(data) {
						self.location='/enterpriseportal/cps/joinusadmin';
					}
				});
			   }
		}

	
	
}

效果虽然实现了,我个人觉得不是很优雅规范,我会想办法改进的。

相关文章:

  • 2022-12-23
  • 2021-11-29
  • 2021-12-10
  • 2022-02-13
  • 2021-07-07
  • 2022-12-23
  • 2021-07-30
猜你喜欢
  • 2021-07-29
  • 2021-07-29
  • 2022-12-23
  • 2021-10-16
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案