⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 增删单元格示例2.htm

📁 javascript编程的组件
💻 HTM
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0048)http://fason.nease.net/zhuanti/table/sample2.htm -->
<!-- saved from url=(0051)http://jkisjk.vip.sina.com/code/html/detailkeep.htm --><HTML><HEAD><TITLE>动态明细示例</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<STYLE>TD {
	FONT-SIZE: 12px
}
INPUT {
	FONT-SIZE: 12px
}
</STYLE>

<META content="MSHTML 6.00.2800.1106" name=GENERATOR></HEAD>
<BODY bgColor=#eeeeee>
<FORM name=frm method=post>
<TABLE 
style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid" 
align=center>
  <TBODY>
  <TR>
    <TD 
      bgColor=#cccccc>说明:<BR>几乎所有的应用网站,都会有动态明细的处理,似乎不同的公司有不同的做法,<BR>1.先设定某些隐藏的明细,然后动态的显示隐藏,<BR>2.将动态明细放在一个multiple=ture的select里,选中一笔明细时将其相关值取出放在旁边修改<BR>3.动态增加HTML对象<BR>4.用一些控件<BR>等等<BR>在这几种里,如果数据量大(上千上万条)的,似乎只有第2种可以胜任,但是它也有自己的缺点:操作性不咋地;<BR>第4种(JK也不怎么了解)操作性与数据量都比较理想,可惜要修改安全设置,并且对使用控件的程序员也有了新的要求,控件的柔性有限,大家也很少使用。<BR>相对来说,只要数据量在一千条以内(整个页的input不超过10000),第三种可能更合适,程序也不算很烦,可以模块化,操作性也还过得去。<BR><BR>本例采用第3种方法。功能有:<BR>1.数据导入导出框:数据导入导出时用到<BR>2.默认值行:输入新增行的预设值,按条件选择记录,一次修改多行时用到<BR>3.增加:复制预设行,增加到最后<BR>4.拆分:复制选中行,增加到选中行后面<BR>5.删除:删除选中行<BR>6.批选:选中所有满足条件的记录(如果没有条件,就全选),或取消选择<BR>7.自动加行:在最后一笔明细里输入向下键,自动增加一行<BR>8.批改:将选中列的预设值填入到所有的选中行的相应列里去<BR>9.提取:将选中行、选中列的信息导出到数据导入导出框<BR>10.填充:将数据导入导出框的信息导出到选中行、选中列里去<BR>11.动态明细在页面离开时保存,返回页面时这些信息还在(比如说存盘失败可以返回,其实实现方法很简单,可惜很多JS程序员以为只能用Cookie来近似实现)<BR><BR>另外需要说明的是:直接使用本例是没有任何意义的,不过有几个功能有普遍用途。比如<FONT 
      color=blue>上下键控制</FONT>与<FONT color=blue>动态明细保存</FONT> 
</TD></TR></TBODY></TABLE>
<TABLE borderColor=#cccccc width="100%" align=center border=1>
  <TBODY>
  <TR>
    <TD width=500><TEXTAREA style="WIDTH: 100%" name=theDetailInfTextarea rows=3></TEXTAREA> 
    </TD>
    <TD align=right><INPUT class=bottom onclick=addDetailProcess(); type=button value=增加>&nbsp; 
<INPUT class=bottom onclick=copyDetailProcess(); type=button value=拆分>&nbsp; 
<INPUT class=bottom onclick=delDetailProcess(); type=button value=删除>&nbsp; 
<INPUT class=bottom onclick=document.frm.submit(); type=button value=完成> 
      <BR>批选<INPUT onclick=selectDetailProcess(this.checked); 
      type=checkbox>&nbsp; 自动加行<INPUT type=checkbox 
      name=autoAddDetailCheckbox>&nbsp; <INPUT class=bottom onclick=modifyDetailProcess(); type=button value=批改>&nbsp; 
<INPUT class=bottom onclick=getDetailInfProcess(); type=button value=提取>&nbsp; 
<INPUT class=bottom onclick=setDetailInfProcess(); type=button value=填充> 
    </TD></TR></TBODY></TABLE>
<DIV id=thedetailtableDIV width="100%">
<TABLE onkeydown=keyDownControl(event.srcElement) borderColor=#cccccc 
width="100%" align=center border=1>
  <TBODY id=tbDetailPrepare>
  <TR>
    <TD><INPUT type=checkbox name=record_select></TD>
    <TD><INPUT name=detail_id></TD>
    <TD><INPUT name=detail_name></TD></TR></TBODY>
  <TBODY>
  <TR id=trDetailTitles bgColor=#eeeeee>
    <TD><INPUT onclick=selectallcheckbox(this) type=checkbox></TD>
    <TD>明细ID<INPUT type=checkbox name=colbox_detail_id></TD>
    <TD>明细NAME<INPUT type=checkbox name=colbox_detail_name></TD></TR>
  <TBODY id=tbDetailUsed>
  <TR>
    <TD><INPUT type=checkbox name=record_select></TD>
    <TD><INPUT name=detail_id></TD>
    <TD><INPUT name=detail_name></TD></TR>
  <TR height=0>
    <TD colSpan=100 height=0>合计</TD></TR></TBODY></TABLE></DIV></FORM><INPUT 
type=hidden name=theHistoryRecord>
<SCRIPT language=javascript>	window.onload = historyOncemore;	window.onbeforeunload = fixHistory;	function fixHistory()							//记住历史	{			document.all("theHistoryRecord").value=document.all("thedetailtableDIV").innerHTML.replace(/\n/g,"");	}	function historyOncemore()						//恢复历史	{		if (document.all("theHistoryRecord").value!="")			{document.all("thedetailtableDIV").innerHTML=document.all("theHistoryRecord").value;			}	}	function selectallcheckbox(obj)					//全选或全不选	{		var tureorfalse=obj.checked;		var theDetail=tbDetailUsed.rows;		for(var i=0;i<theDetail.length-1;i++)		{			theDetail[i].all("record_select").checked=tureorfalse;		}	}			function addDetailProcess(afterRowIndex)		//增加明细	{		var alltbDetailUsed= document.all("tbDetailUsed").rows;		var theFirstSelectedDetail;		if (afterRowIndex==null)		{			for(var i=0;i<alltbDetailUsed.length-1;i++)			{				if (alltbDetailUsed[i].all("record_select").checked==true) {theFirstSelectedDetail=i;break;}			}			if (theFirstSelectedDetail==null) {theFirstSelectedDetail=alltbDetailUsed.length-2;}		}		else theFirstSelectedDetail=afterRowIndex;		var newRow = document.all("tbDetailPrepare").rows[0].cloneNode(true);		var desRow = alltbDetailUsed[theFirstSelectedDetail+1];		desRow.parentElement.insertBefore(newRow,desRow );	}			function copyDetailProcess()					//拆分明细	{		var alltbDetailUsed= document.all("tbDetailUsed").rows;		var theFirstSelectedDetail;		for(var i=0;i<alltbDetailUsed.length-1;i++)		{			if (alltbDetailUsed[i].all("record_select").checked==true) {theFirstSelectedDetail=i;break;}		}		if (theFirstSelectedDetail==null) {alert("拆分操作之前请先选择一笔明细!");return false;}		var newRow = alltbDetailUsed[theFirstSelectedDetail].cloneNode(true);		var desRow = alltbDetailUsed[theFirstSelectedDetail+1];		desRow.parentElement.insertBefore(newRow,desRow );	}	function delDetailProcess()						//删除明细	{		var alltbDetailUsed= document.all("tbDetailUsed").rows;		if (confirm("确定选择正确并且要将这些明细删除")==false) return false;		for(var i=0;i<alltbDetailUsed.length-1;i++)		{			if (alltbDetailUsed[i].all("record_select").checked==true)			{				document.all("tbDetailUsed").deleteRow(i);				i=i-1;			}		}	}	function modifyDetailProcess()					//批量修改	{		var i=0;		var j=0;		var k=0;		var theSelectedColName=new Array();		var theSelectedColValue=new Array();		var theColboxs=document.all("trDetailTitles").getElementsByTagName("input");		var theDetailPrepareTr=document.all("tbDetailPrepare").rows[0];		for (j=1;j<theColboxs.length;j++)		{			if	((theColboxs[j].name.substr(0,7)=="colbox_")&&theColboxs[j].checked)			{			theSelectedColName[theSelectedColName.length]=theColboxs[j].name.substr(7,100);			theSelectedColValue[theSelectedColValue.length]=theDetailPrepareTr.all(theColboxs[j].name.substr(7,100)).value;			}				}				if (theSelectedColName.length==0) {alert("您没有选择需要修改的列!");return false;}		if (!confirm("真的要批量修改?")) return false;				var alltbDetailUsed= document.all("tbDetailUsed").rows;		for(var i=0;i<alltbDetailUsed.length-1;i++)		{			if (alltbDetailUsed[i].all("record_select").checked)			{				for (j=0;j<theSelectedColName.length;j++)				{					alltbDetailUsed[i].all(theSelectedColName[j]).focus();					alltbDetailUsed[i].all(theSelectedColName[j]).value=theSelectedColValue[j];					alltbDetailUsed[i].all(theSelectedColName[j]).select();				}						}		}	}		function getDetailInfProcess()					//提取	{		var i=0;		var j=0;		var theSelectedColName=new Array();		var theSelectedColValue=new Array();		var theColboxs=document.all("trDetailTitles").getElementsByTagName("input");		var theDetailInf="";		for (j=1;j<theColboxs.length;j++)		{			if	((theColboxs[j].name.substr(0,7)=="colbox_")&&theColboxs[j].checked)			{			theSelectedColName[theSelectedColName.length]=theColboxs[j].name.substr(7,100);			}				}				if (theSelectedColName.length==0) {alert("您没有选择提取列!");return false;}		var alltbDetailUsed= document.all("tbDetailUsed").rows;		for(var i=0;i<alltbDetailUsed.length-1;i++)		{			if (alltbDetailUsed[i].all("record_select").checked)			{				for (j=0;j<theSelectedColName.length;j++)				{					theDetailInf=theDetailInf+alltbDetailUsed[i].all(theSelectedColName[j]).value+";";				}				theDetailInf=theDetailInf+"\n";			}		}		document.all("theDetailInfTextarea").innerText=theDetailInf;	}	function setDetailInfProcess()					//填充	{		var i=0;		var j=0;		var theSelectedColName=new Array();		var theColboxs=document.all("trDetailTitles").getElementsByTagName("input");		var alltbDetailUsed= document.all("tbDetailUsed").rows;		var theDetailInf="";		var theColsNum=0;		var theRowsNum=0;		for (j=1;j<theColboxs.length;j++)		{			if	((theColboxs[j].name.substr(0,7)=="colbox_")&&theColboxs[j].checked)			{			theSelectedColName[theSelectedColName.length]=theColboxs[j].name.substr(7,100);			}				}		if (theSelectedColName.length==0) {alert("您没有选择填充列!");return false;}		theColsNum=theSelectedColName.length;		theDetailInf=document.all("theDetailInfTextarea").innerText.replace(/\t/g,";");		if(theDetailInf.length==0)		{			alert("没有信息可以填充");			return false;		}		var theDetailInfRow=theDetailInf.split("\n");		var theDetailInfCell;		theRowsNum=theDetailInfRow.length;		if(theRowsNum>1000) theRowsNum=1000;		for(i=0;i<theRowsNum;i++)		{			theDetailInfCell=theDetailInfRow[i].split(";");			if (theDetailInfCell.length<theColsNum) break;		}		theRowsNum=i;		if(!confirm("填充行数为"+theRowsNum+";填充列数为"+theColsNum+"\n请确认!")) return false;				k=0;		for(var i=0;(i<alltbDetailUsed.length-1)&&(k<theRowsNum);i++)		{			if (alltbDetailUsed[i].all("record_select").checked)			{					theDetailInfCell=theDetailInfRow[k++].split(";");				for (j=0;j<theSelectedColName.length;j++)				{					alltbDetailUsed[i].all(theSelectedColName[j]).focus();					alltbDetailUsed[i].all(theSelectedColName[j]).value=theDetailInfCell[j];					alltbDetailUsed[i].all(theSelectedColName[j]).select();				}						}		}		}		function selectDetailProcess(trueOrFalse)		//按条件批量选中	{		if (trueOrFalse!=false) trueOrFalse=true;		var i=0;		var j=0;		var theSelectedColName=new Array();		var theSelectedColValue=new Array();		var theColboxs=document.all("trDetailTitles").getElementsByTagName("input");		var theDetailPrepareTr=document.all("tbDetailPrepare").rows[0];		for (j=1;j<theColboxs.length;j++)		{			if	((theColboxs[j].name.substr(0,7)=="colbox_")&&theColboxs[j].checked)			{			theSelectedColName[theSelectedColName.length]=theColboxs[j].name.substr(7,100);			theSelectedColValue[theSelectedColValue.length]=theDetailPrepareTr.all(theColboxs[j].name.substr(7,100)).value;			}				}		var alltbDetailUsed= document.all("tbDetailUsed").rows;		for(var i=0;i<alltbDetailUsed.length-1;i++)		{			var theTrWillBeSelected=true;			for (j=0;j<theSelectedColName.length;j++)			{				if	(alltbDetailUsed[i].all(theSelectedColName[j]).value!=theSelectedColValue[j])				{					theTrWillBeSelected=false;break;				}			}			if (theTrWillBeSelected)	alltbDetailUsed[i].all("record_select").checked=trueOrFalse;		}	}		function keyDownControl(obj)	//用于控制明细里的上下键。只控制input	{		if(obj.tagName!="INPUT"||obj.name=="") return true;		k=event.keyCode;		if(!(k==38||k==40)) return true;		var theSamenameInputs=document.all(obj.name);		var i=0;		if (theSamenameInputs.length>1)			{			for (i=0;i<theSamenameInputs.length;i++)				{	if	(theSamenameInputs[i]==obj)	break;	}			}		if((i==theSamenameInputs.length-1)&&(k==40))			{				if(document.all("autoAddDetailCheckbox")!=null&&document.all("autoAddDetailCheckbox").checked)				addDetailProcess(theSamenameInputs.length-2);			}		if((i>0)&&(k==38))			{			theSamenameInputs[i-1].select();			theSamenameInputs[i-1].focus();			event.returnValue=false;			return false;			}		if((i<theSamenameInputs.length-1)&&(k==40))			{			theSamenameInputs[i+1].select();			theSamenameInputs[i+1].focus();			event.returnValue=false;			return false;			}	}</SCRIPT>
 
<P align=right><A href="http://fason.nease.net/">【阿信的小天地】</A></P></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -