简单的事件委托可勾选编辑的js购物车

*{ margin:0; padding:0; font-size:14px}
#box{ width:500px; margin:100px auto}
table,th,td{ border:1px solid #000; border-collapse:collapse}
td,th{ width:100px; height:30px; padding:10px}
input[type="text"]{ display:none; height:24px; width:60px; border:1px solid #ccc;}
tbody tr td:first-child{text-align: center;}
tfoot td{text-align: right;}
.editBtn{ color:#666}
.delBtn{ color:red}
.okBtn,.cancelBtn{ display:none}

.edit span{ display:none}
.edit input[type="text"]{ display:inline-block}
.edit .editBtn,.edit .delBtn{ display:none}
.edit .okBtn,.edit .cancelBtn{ display:inline}
<body>
<div id="box">
	<table>
		<thead>
			<tr>
	            <th><label>全选:<input type="checkbox" id="allCheck"/></label></th>
	            <th>名称</th>
	            <th>单价</th>
	            <th>数量</th>
	            <th>编辑</th>
	        </tr>
		</thead>
        <tbody>
	        <tr>
	        	<td><input type="checkbox" class="check"/></td>
	            <td><span>张三</span><input type="text"></td>
	            <td><span>18</span><input type="text"></td>
	            <td><span>1</span><input type="text"></td>
	            <td>
	            	<a href="javascript:;" class="editBtn">编辑</a>
	            	<a href="javascript:;" class="okBtn">确定</a>
	            	<a href="javascript:;" class="cancelBtn">取消</a>
	            	<a href="javascript:;" class="delBtn">删除</a>
	            </td>
	
	        </tr>
	        <tr>
	        	<td><input type="checkbox" class="check"/></td>
	            <td><span>李四</span><input type="text"></td>
	            <td><span>25</span><input type="text"></td>
	            <td><span>2</span><input type="text"></td>
	            <td><a href="javascript:;" class="editBtn">编辑</a><a href="javascript:;" class="okBtn">确定</a> <a href="javascript:;" class="cancelBtn">取消</a><a href="javascript:;" class="delBtn">删除</a></td>
	
	        </tr>
	        <tr>
	        	<td><input type="checkbox" class="check"/></td>
	            <td><span>小强</span><input type="text"></td>
	            <td><span>22</span><input type="text"></td>
	            <td><span>3</span><input type="text"></td>
	            <td><a href="javascript:;" class="editBtn">编辑</a><a href="javascript:;" class="okBtn">确定</a> <a href="javascript:;" class="cancelBtn">取消</a><a href="javascript:;" class="delBtn">删除</a></td>
	
	        </tr>
	        <tr>
	        	<td><input type="checkbox" class="check"/></td>
	            <td><span>小明</span><input type="text"></td>
	            <td><span>16</span><input type="text"></td>
	            <td><span>4</span><input type="text"></td>
	            <td><a href="javascript:;" class="editBtn">编辑</a><a href="javascript:;" class="okBtn">确定</a> <a href="javascript:;" class="cancelBtn">取消</a><a href="javascript:;" class="delBtn">删除</a></td>
	
	        </tr>
        </tbody>
        <tfoot>
        	<tr>
        		<td colspan="5">总价:¥<b id="money"></b></td>
        	</tr>
        </tfoot>
   </table>
</div>
<script src="tools.js"></script>
<script>
	var box = tools.$("#box");
	var	table = tools.$("table",box)[0];
	var tbody = tools.$("tbody", box)[0];
	var allCheck = tools.$("#allCheck");
	var n = 0; // 记录单选按钮被选中的数量
	
	table.onclick = function(e){
		e = e || event;
		//找到事件源
		var target = e.target || e.srcElement;
		//找到当前tr
		var tr = target.parentNode.parentNode;
		//判断事件源
		if(target.className === "editBtn"){
			//编辑按钮
			//切换span和input得显示隐藏
			tr.className = "edit";
			//找到当前行所有span,把span得内容给到对应的input.value
			var aSpan = tools.$("span", tr);
			for(var i = 0; i < aSpan.length; i++){
				aSpan[i].nextElementSibling.value = aSpan[i].innerHTML;
			}
		}else if(target.className === "okBtn"){
			//确定按钮
			tr.className = "";
			var aSpan = tools.$("span", tr);
			for(var i = 0; i < aSpan.length; i++){
				aSpan[i].innerHTML = aSpan[i].nextElementSibling.value;
			}
			calcPrice();
		}else if(target.className === "cancelBtn"){
			//取消
			tr.className = "";
		}else if(target.className === "delBtn"){
			if(confirm("你真的不买我了吗?")){	
				tr.parentNode.removeChild(tr);
				//判断当前一行是否被选中
				var check = tools.$(".check", tr)[0];
				//如果被选中,n减一
				if(check.checked) n--;
				//判断n跟aCheck的length的关系
				allCheck.checked = (n===tools.$(".check", box).length);
				calcPrice();
			}
		}else if(target.id === "allCheck"){
			//全选
			//找到所有的单选
			var aCheck = tools.$(".check", box);
			for(var i = 0; i < aCheck.length; i++){
				//单选得状态跟全选同步
				aCheck[i].checked = target.checked;
			}
			//n得值也要修改
			n = target.checked ? aCheck.length : 0;
			calcPrice();
		}else if(target.className === "check"){
			target.checked ? n++ : n--;
			var aCheck = tools.$(".check", box);
			allCheck.checked = n === aCheck.length;
			calcPrice();
		}
	}
		
	function calcPrice(){
		var sum = 0;
		//找到被选中的那些行,然后把这些行的单价X数量,累加
		var aTr = tools.$("tr", tbody);
		for(var j = 0; j < aTr.length; j++){
			if(tools.$(".check", aTr[j])[0].checked){
				var price = Number(tools.$("span", aTr[j])[1].innerHTML);
				var num = Number(tools.$("span", aTr[j])[2].innerHTML);
				sum += price*num;
			}
		}
		tools.$("#money").innerHTML = sum + "元";
	}
		
	
</script>
</body>

tool.js

var tools = {
	/* 查找DOM对象
	 * @param selector string css基本选择器
	 * @param [parent] DOMobj 父级元素对象
	 * @return   DOMobj || HTMLCollection
	 */
	$: function(selector ,parent){
		parent = parent || document;
		switch(selector.charAt(0)){
			case "#":
				return document.getElementById(selector.slice(1));
			case ".":
				return parent.getElementsByClassName(selector.slice(1));
			default:
				return parent.getElementsByTagName(selector);
		}
	},
	
	/*获取外部样式
	 * @param obj  DOMobj 要获取属性的DOM对象 
	 * @param attr string 获取某一条属性的属性名
	 * @return  string  obj的attr属性值
	 */
	getStyle: function(obj, attr){
		if(obj.currentStyle){ //针对IE
			return obj.currentStyle[attr];
		}else{
			return getComputedStyle(obj,false)[attr];
		}
	},
	
	/* 获取body宽高
	 * 
	 * @return obj {width,height}
	 * */
	getBody: function(){
		return {
			width: document.documentElement.clientWidth || document.body.clientWidth,
			height: document.documentElement.clientHeight || document.body.clientHeight
		};
	},
	
	/*让元素在body里绝对居中
	 * @param obj  DOMobj 居中的那个元素对象
	 */
	
	showCenter: function(obj){
		
		//console.log(this);
		//this在不同执行环境指向的对象是不一样的,所以用一个变量在指向变化之前先存下来
		var _this = this;
		
		//obj相对于body定位
		document.body.appendChild(obj);
		obj.style.position = "absolute";
		
		function center(){
			//console.log(_this);
			var _left = (_this.getBody().width - obj.offsetWidth)/2,
				_top = (_this.getBody().height - obj.offsetHeight)/2;
			obj.style.left = _left + "px";
			obj.style.top = _top + "px";
		}
		
		center();
		window.onresize = center;
		
	},
	/* 设置样式
	 * @param obj DOMobj 设置谁的样式
	 * @param oAttr obj  {left:"200px",top:"100px"}
	 * */
	css: function(obj,oAttr){
		
	}
	
	//tools.css(div,{left:"200px",width:"100px"});
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,datagridcheckbox的勾选事件可以通过在代码中添加相应的事件处理程序来实现。具体实现方法可能因不同的开发环境和技术而有所不同。在引用中的代码示例中,可以看到在checkbox的formatter函数中添加了一个判断语句,根据数据中的checked字段来确定是否勾选checkbox。 在示例代码中,可以看到在formatter函数中,如果数据行的checked字段为true,则返回一个勾选的checkbox,否则返回一个未勾选的checkbox。这意味着当checkbox被勾选时,可以通过检查该行数据中的checked字段来确定。 因此,在代码中可以通过监听checkbox的点击事件来实现勾选事件的处理。当checkbox被点击时,可以获取到该行数据,然后可以处理相应的逻辑。 请注意,代码示例中使用的是jQuery的datagrid插件,在不同的开发环境和技术中,可能会有不同的实现方式。具体实现方法可能需要根据所使用的开发环境和技术进行适当调整。 综上所述,datagridcheckbox的勾选事件可以通过在代码中添加相应的事件处理程序来实现,具体实现方法可能因不同的开发环境和技术而有所不同。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [jQuery EasyUI DataGrid Checkbox数据设定与取值](https://blog.csdn.net/sun5769675/article/details/45171627)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [自定义用户控件,根据数据字段改变Grid行背景色](https://download.csdn.net/download/lcforcom/9270593)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值