- 浏览: 85378 次
- 性别:
- 来自: 陕西 西安
最近访客 更多访客>>
最新评论
-
suneyejava:
僧_唐 写道使用javascipt日志的必要性 不像其他的日志 ...
JavaScript日志工具介绍 -
jzshmyt:
网上的很多js日志调试工具都不怎么好用,不妨试试
javasc ...
JavaScript日志工具介绍 -
僧_唐:
使用javascipt日志的必要性 不像其他的日志的记录那么有 ...
JavaScript日志工具介绍 -
宋建勇:
com.xinli.struts.service.Provin ...
DWR实现省市县三级联动 -
谭亮辉:
不错不错,是我想要的
JXL使用总结
今天偶尔上一个音乐网站发现音乐网站里面都提供全选和反选操作,觉得不错,加之最近项目上有相似之处,所以总结如下:
说明:addItem()实在敲回车后自动添加一行。这样用户体验比较好!
实现功能:实现行的增加,删除,全选,反选,金额的计算,四舍五入等。
问题:在如果使用模板来添加新行add(tbodyid)的话,那么第一行的任何数据都会被带到下一个新添加的行。
解决办法:不使用模板adds(tbodyid)来添加新行就可以解决这个问题。
customer.js:
calc.html:
说明:addItem()实在敲回车后自动添加一行。这样用户体验比较好!
实现功能:实现行的增加,删除,全选,反选,金额的计算,四舍五入等。
问题:在如果使用模板来添加新行add(tbodyid)的话,那么第一行的任何数据都会被带到下一个新添加的行。
解决办法:不使用模板adds(tbodyid)来添加新行就可以解决这个问题。
customer.js:
/** * @author fuhao * @param {Object} tbodyid * 首先在Html页面上定义一个标准的table模板 * table的子节点是tbody * tbody的子节点是tr * tr的子节点是td * td的子节点是checkbox和input */ // 以table模板为标准,添加新的行的方法 // 该方法带来的问题:新添加的行会将模板行的数据也带下来了 // 解决办法:adds(tbodyid)方法可以解决这个问题 function add(tbodyid){ if(tbodyid==null){ alert("该方法需要的参数不正确"); return ; } // 得到tbody,也可以使用prototype.js里面的$(tbodyid) var tbody = document.getElementById(tbodyid); // var tbody = $(tbodyid); // 获得tbody下的索引为1的tr var trtemplate = tbody.childNodes[1]; // 得到tr下的td数组 var tds = trtemplate.childNodes; // 得到该tr下所有td数组的长度 var trlength = tds.length; var tr = document.createElement("tr"); for(var i=0;i<trlength;i++){ var td = document.createElement("td"); // 设置td的式样标记 td.className = tds[i].className; var content = tds[i].innerHTML; td.innerHTML = content; tr.appendChild(td); } tbody.appendChild(tr); } // 删除选中行的方法 function del(name,tbodyid){ if(name==null){ alert("该方法需要的参数不正确"); return ; } // 获得数组 var names = document.getElementsByName(name); var tbody= document.getElementById(tbodyid); // 获得数组的长度 var length = names.length; if(length==1){ alert("请至少保留一条记录"); return ; } // 定义一个数组 var arr = new Array(); try{ for(var i=0;i<length;i++){ if(names[i].checked==true){ // 将checkbox的父节点(td)的父节点(tr)放入数组里面 arr.push(names[i].parentNode.parentNode); } } }catch(e){ alert("捕获到的异常是:"+e); } if(arr.length==0){ alert("请至少选择一条删除"); return ; } var delsure = confirm("确认要删除所选记录吗?"); if(!delsure){ return ; } for(var j=0;j<arr.length;j++){ if(arr.length == length){ alert("请至少保留一条记录"); return ; } // 如果引入prototype_1.5.js的话那么使用Element.remove(arr[j]);达到删除的目的 // Element.remove(arr[j]); tbody.removeChild(arr[j]); } } // 敲回车,则添加新的一行 function addItem(tbodyid){ // 13代表回车 if(event.keyCode==13){ add(tbodyid); } } // 全部选择 function checkAll(name){ // 首先获得所有checkbox集合 var names = document.getElementsByName(name); for(var i=0;i<names.length;i++){ names[i].checked=true; } } // 取消选择--反选 function cancelCheck(name){ var names = document.getElementsByName(name); var length = names.length; for(var i=0;i<length;i++){ if(names[i].checked){ names[i].checked = false; }else{ names[i].checked = true; } } } //用于自动补0的方法 如:5--5.00,5.5--5.50 function mend(number){ var str = number+""; if (str.indexOf(".")==-1){ //说明没有小数点 return str+".00"; }else{ //说明有小数点 var tmp = str.substring(str.indexOf(".")+1); if (tmp.length==0) return str+"00"; if (tmp.length==1) return str+"0"; if (tmp.length>=2) return str.substring(0,str.indexOf(".")+3); } } //用于四舍五入的方法 function ForDight(Dight,How) { Dight = Math.round(Dight*Math.pow(10,How))/Math.pow(10,How); return mend(Dight); } // 统一的错误提示方法 function showError(str,b){ // 首先获得div var div = document.getElementById("div"); // 显示错误提示语句 var strr = "<img src='image/error_m.gif' /><font color='red'>" +str+ "</font>"; if(b == false){ div.innerHTML = strr; div.style.display = ""; }else{ div.style.display = "none"; } } // 计算(这里以数量作为参照物) function calc(obj){ // obj.parentElement获取对象层次中的父对象 var td = obj.parentElement; var tr = td.parentElement; var numbers = tr.childNodes[4].childNodes[0].value; // 数量 //alert("numbers:"+numbers); var faceValue = tr.childNodes[2].childNodes[0].value; //面值 //alert("faceValue:"+faceValue); var additionValue = tr.childNodes[3].childNodes[0].value; //附赠 //alert("additionValue:"+additionValue); //判断为空或者不为数字 if(numbers=="" || faceValue=="" || additionValue=="" || isNaN(numbers) || isNaN(faceValue) || isNaN(additionValue)){ // alert("--你的输入有误,数量为非空正整数,面值和附赠应为非空正数--"); tr.childNodes[5].childNodes[0].value = ""; tr.childNodes[6].childNodes[0].value = ""; tr.childNodes[7].childNodes[0].value = ""; showError("你的输入有误,数量为非空正整数,面值和附赠应为非空正数",false); return ; }else{ showError("",true); } //判断是否小于零或者数量为整数 if(numbers<=0*1 || faceValue<=0*1 || additionValue<=0*1 || numbers.indexOf(".")!=-1){ // alert("--你的输入有误,数量为非空正整数,面值和附赠应为非空正数--"); tr.childNodes[5].childNodes[0].value = ""; tr.childNodes[6].childNodes[0].value = ""; tr.childNodes[7].childNodes[0].value = ""; showError("你的输入有误,数量为非空正整数,面值和附赠应为非空正数",false); return ; }else{ showError("",true); } var faceValues = numbers*faceValue; //面值金额 var additionValues = numbers*additionValue;//附赠金额 var faceValueAll = faceValues+additionValues; //面值总额 // 赋值 tr.childNodes[5].childNodes[0].value = ForDight(faceValues,2); tr.childNodes[6].childNodes[0].value = ForDight(additionValues,2); tr.childNodes[7].childNodes[0].value = ForDight(faceValueAll,2); } // 计算实收金额的方法 function calcs(obj){ // obj.parentElement获取对象层次中的父对象 var td = obj.parentElement; var tr = td.parentElement; var numbers = tr.childNodes[4].childNodes[0].value; // 数量 var price = tr.childNodes[8].childNodes[0].value; //单价 var agio = tr.childNodes[9].childNodes[0].value; //折扣 if(numbers=="" || price=="" || isNaN(numbers) || isNaN(price) || isNaN(agio)){ tr.childNodes[10].childNodes[0].value = ""; showError("数量应该为非空正整数,单价和折扣应为非空正数",false); return ; }else{ showError("",true); } if(numbers<=0*1 || numbers.indexOf(".")!=-1 || price<=0*1){ tr.childNodes[10].childNodes[0].value = ""; showError("数量应该为非空正整数,单价不能小于零",false); return ; }else{ showError("",true); } var factValues = "" ; if(agio==""){//说明没有填写折扣 factValues = price*numbers; tr.childNodes[10].childNodes[0].value = ForDight(factValues,2); }else{ if(agio<=0*1 || agio>10){ tr.childNodes[10].childNodes[0].value = ""; showError("折扣应该大于0小于10",false); return ; }else{ showError("",true); factValues = price*numbers*agio; tr.childNodes[10].childNodes[0].value = ForDight(factValues,2); } } } // 不以模板为标准添加新的一行 // obj.setAttribute()--把指定的属性设置成为指定的字符串值,如果该属性不存在则添加一个新的属性 function adds(tbodyid){ var tbody = document.getElementById(tbodyid); var tr = document.createElement("tr"); var td = document.createElement("td"); var td1 = document.createElement("td"); var td2 = document.createElement("td"); var td3 = document.createElement("td"); var td4 = document.createElement("td"); var td5 = document.createElement("td"); var td6 = document.createElement("td"); var td7 = document.createElement("td"); var td8 = document.createElement("td"); var td9 = document.createElement("td"); var td10 = document.createElement("td"); var checkbox = document.createElement("<input type='checkbox' name='checkName' />"); checkbox.setAttribute("align","center"); var input1 = document.createElement("<input name='cardName' type='text' size='12' value='没有模板的' readonly='true' />"); var input2 = document.createElement("<input name='faceValue' type='text' size='12' onchange='calc(this);calcs(this)' />"); var input3 = document.createElement("<input name='additionValue' type='text' size='12' onchange='calc(this)' />"); var input4 = document.createElement("<input name='cardNumber' type='text' size='12' onchange='calc(this);calcs(this)' />"); var input5 = document.createElement("<input name='faceValues' type='text' size='12' readonly='true' />"); var input6 = document.createElement("<input name='additionValues' type='text' size='12' readonly='true' />"); var input7 = document.createElement("<input name='faceValuesAll' type='text' size='12' readonly='true' />"); var input8 = document.createElement("<input name='price' type='text' size='12' onchange='calcs(this)' />"); var input9 = document.createElement("<input name='agios' type='text' size='12' onchange='calcs(this)' />"); var input10 = document.createElement("<input name='factValue' type='text' readonly='true' size='12' onchange='calcs(this)' />"); td.setAttribute("align","center"); td1.setAttribute("align","center"); td2.setAttribute("align","center"); td3.setAttribute("align","center"); td4.setAttribute("align","center"); td5.setAttribute("align","center"); td6.setAttribute("align","center"); td7.setAttribute("align","center"); td8.setAttribute("align","center"); td9.setAttribute("align","center"); td10.setAttribute("align","center"); input1.setAttribute("align","center"); input2.setAttribute("align","center"); input3.setAttribute("align","center"); input4.setAttribute("align","center"); input5.setAttribute("align","center"); input6.setAttribute("align","center"); input7.setAttribute("align","center"); input8.setAttribute("align","center"); input9.setAttribute("align","center"); input10.setAttribute("align","center"); td.appendChild(checkbox); td1.appendChild(input1); td2.appendChild(input2); td3.appendChild(input3); td4.appendChild(input4); td5.appendChild(input5); td6.appendChild(input6); td7.appendChild(input7); td8.appendChild(input8); td9.appendChild(input9); td10.appendChild(input10); tr.appendChild(td); tr.appendChild(td1); tr.appendChild(td2); tr.appendChild(td3); tr.appendChild(td4); tr.appendChild(td5); tr.appendChild(td6); tr.appendChild(td7); tr.appendChild(td8); tr.appendChild(td9); tr.appendChild(td10); tbody.appendChild(tr); }
calc.html:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>JavaScript例子</title> <script src="js/customer.js"></script> <link href="css/style.css" rel="stylesheet" type="text/css"> </head> <body> <a href="#" onclick="add('DispatchItemTable')">增加一行(使用模板)</a> <a href="#" onclick="del('checkName','DispatchItemTable')">删除</a> <a href="#" onclick="checkAll('checkName')">全选</a> <a href="#" onclick="cancelCheck('checkName')">反选</a> <a href="#" onclick="adds('DispatchItemTable')">增加一行(不使用模板)</a> 面值金额=面值*数量 附赠金额=附赠*数量 面值总额=面值金额+附赠金额 实收金额=单价*数量*折扣 </p> <table id="table" align='center' border='1' bordercolor='#0690AE' cellpadding='0' cellspacing='0' style='border-collapse:collapse;' width='100%'> <tbody id="DispatchItemTable"> <tr> <td nowrap class='data_list_th'>序号</td> <td class='data_list_th'>卡名称</td> <td class='data_list_th'><font color="red">*</font>面值(元)</td> <td class='data_list_th'><font color="red">*</font>附赠(元)</td> <td class='data_list_th'><font color="red">*</font>数量(枚)</td> <td class='data_list_th'>面值金额(元)</td> <td class='data_list_th'>附赠金额(元)</td> <td class='data_list_th'>面值总额(元)</td> <td class='data_list_th'><font color="red">*</font>单价(元)</td> <td class='data_list_th'><font color="red">*</font>折扣</td> <td class='data_list_th'>实收金额(元)</td> </tr> <tr id="testc"> <td class='data_list_td'><input type="checkbox" name="checkName" /></td> <td class='data_list_td'><input name="cardName" type="text" size="12" value="由模板生成的" readonly="true" onkeydown="addItem('DispatchItemTable')" /></td> <td class='data_list_td'><input name="faceValue" type="text" size="12" onchange="calc(this);calcs(this)" /></td> <td class='data_list_td'><input name="additionValue" type="text" size="12" onchange="calc(this)" /></td> <td class='data_list_td'><input name="cardNumber" type="text" size="12" onchange="calc(this);calcs(this)" /></td> <td class='data_list_td'><input type="text" name="faceValues" size="12" readonly="true" /></td> <td class='data_list_td'><input type="text" name="additionValues" size="12" readonly="true" /></td> <td class='data_list_td'><input type="text" name="faceValuesAll" size="12" readonly="true" /></td> <td class='data_list_td'><input type="text" name="price" size="12" onchange="calcs(this)" /></td> <td class='data_list_td'><input type="text" name="agios" size="12" onchange="calcs(this)" /></td> <td class='data_list_td'><input type="text" name="factValue" size="12" readonly="true" /></td> </tr> </tbody> </table> <p><div align="center" id="div" style="display:none;" /></p> </body> </html>
- calc.zip (30.3 KB)
- 下载次数: 51
- calc.zip (31.2 KB)
- 描述: 这个是修改后的例子!之前的哪个在删除有点问题!
- 下载次数: 36
- calc.zip (32.7 KB)
- 描述: 第三次修改后的代码!
- 下载次数: 393
评论
3 楼
wen870105
2008-04-01
这个代码在FF下是有问题的
我有用的是ff 2.0.0.13
我有用的是ff 2.0.0.13
2 楼
fuhao9611
2007-04-23
如果引入prototype_1.5.js的话那么使用Element.remove(arr[j]);达到删除的目的
1 楼
nanhey
2007-04-19
删除好像有问题,删不掉
相关推荐
在JavaScript编程中,"全选反选"功能是常见的用户交互设计,常见于表格或列表数据的批量操作中。这个功能允许用户一键选择或取消选择所有项目,极大地提高了操作效率。下面将详细介绍如何使用JavaScript来实现这个...
jQuery表格行全选反选单选代码,例子采用bootstrap格式,可以选择自定义。
接下来,我们引入jQuery库,并创建一个名为`select.js`的JavaScript文件,来处理全选/反选的逻辑: ```javascript $(document).ready(function() { // 当全选按钮被点击时,触发事件 $('#selectAll').click...
本示例中的"JS简单表格列表全选反选代码"是一个使用原生JS编写的功能,它允许用户通过点击表头按钮来实现表格数据的全选和反选操作。这个功能在处理大量数据时特别有用,例如在用户需要批量操作表格项时。 1. **...
以下是三种实现Checkbox全选和反选的方法,以及它们的JavaScript和Java实现细节。 ### 方法一:使用`checked`属性 **JavaScript实现**: 在JavaScript中,可以通过获取全选按钮的`checked`属性来控制所有复选框的...
综上所述,"checkbox实现全选和反选经典例子"是一个关于如何在Web应用中利用Checkbox控件提高用户交互性的实践教程。通过理解Checkbox的基本操作,结合服务器控件的事件处理和逻辑编程,我们可以创建出高效且易于...
本示例“基于jQuery的三个JS复选框全选反选例子.zip”聚焦于如何利用jQuery实现复选框的全选与反选功能,这在表格或者多选项选择场景中非常常见。以下将详细介绍这一功能的实现方式。 首先,我们需要理解复选框...
这个"原生JS表格列表全选反选代码"就是一个解决此类问题的示例。下面将详细介绍这个示例中涉及的关键知识点。 1. **HTML表格(`<table>`)**: HTML表格是网页中用于组织数据的基本元素,由`<table>`、`<tr>`(行...
在JavaScript中,全选和反选...总的来说,通过JavaScript实现全选和反选功能并不复杂,关键在于正确地获取和操作复选框的`checked`属性。了解这些基础知识后,你可以灵活地应用在各种Web项目中,提高用户的交互体验。
总结来说,"JQ 复选框全选反选"是jQuery中常见的用户交互功能,通过选择器定位复选框,绑定事件处理函数,以及利用DOM操作改变元素属性,可以轻松实现这一功能。在实际开发中,理解并掌握这些基础技巧对于提升用户...
AngularJS实现全选反选功能的知识点可以分为以下几个方面进行详细介绍: 1. AngularJS基本概念:AngularJS是一种流行的前端JavaScript框架,由Google维护和开发。它的主要目的是通过扩展HTML来简化Web应用的开发。...
购物车全选反选功能是电商网站中常见的需求,允许用户一次性选择或取消选择所有商品。 首先,我们需要创建一个HTML模板,该模板包含一个表格来展示购物车中的商品,以及用于全选和反选的复选框。在这个例子中,我们...
复选框在用户界面设计中扮演着重要角色,它们允许用户在多个选项中进行多选操作。全选和反选功能则是复选框常用的一种交互模式...在实际开发中,我们需要根据具体的技术栈和业务需求,灵活地实现和优化全选和反选功能。