利用checkbox删除数据的做法

说实话挺失败本来想用js写个原生的ajax出来提交删除的,但是失败了,时间紧就用了jqueryAjax提交,这里做个记录和讲解吧,免得以后自己忘了。

首先jsp页面

<div class="main">
	<div class="optitle clearfix">
		<em><input type="button" name="button" value="添加数据" class="input-button" οnclick="location.href='pages/jsp/modify.jsp'" /></em>
		<em><input type="button" name="button" value="查询数据" class="input-button" οnclick="location.href='billsList.action'" /></em>
		<em><input type="button" name="button" value="删除数据" class="input-button" id="delete"/></em>
		<div class="title">账单管理>></div>
	</div>
	<div class="content">
		<table class="list">
			<tr>
				<td>全选<input type="checkbox" name="allcheckbox" id="allchoose" οnclick="checkAll();"/></td>
				<td>账单编号</td>
				<td>商品名称</td>
				<td>商品数量</td>
				<td>交易金额</td>
				<td>是否付款</td>
				<td>供应商名称</td>
				<td>商品描述</td>
				<td>账单时间</td>
			</tr>
			<c:forEach items="${bills}" var="bill">
			<tr>
				<td><input type="checkbox" name="billdel" value="${bill.id}"/></td>
				<td>${bill.id}</td>
				<td>${bill.name}</td>
				<td>${bill.count}</td>
				<td>${bill.money}</td>
				<td>
				<c:if test="${bill.payfor eq 0}">
					<c:out value="未付款"/>
				</c:if>
				<c:if test="${bill.payfor eq 1}">
					<c:out value="已付款"/>
				</c:if>
				</td>
				<td>${bill.suppName}</td>
				<td>${bill.content}</td>
				<td>${bill.time}</td>
				
			</tr>
			</c:forEach>
		</table>
	</div>
checkbox最好的把id属性和name属性都写上。删除按钮也最好是写上id和name属性
/**
 *传到action的checkbox数组
 */
$(function(){
	$("#delete").bind("click",function(){
		
		var bill = $("input[name='billdel']:checked").serialize();
		
		$.ajax({
			url: "deleteBills.action",
			type: "post",
			data: bill,
			async:true,
			success: function () {
				location.reload();
				//提交数据成功后,返回来要执行的函数
			}
		});
				
	});
});
这个就是jquery方法的ajax,解释一下:

$("#delete").bind("click",function() 这句就是说找到id为delete的bind绑定一个click事件

var bill = $("input[name='billdel']:checked").serialize();这句的bill其实被语句一赋值,就是个数组了,serialize是

序列化一组表单元素,将表单内容编码为用于提交的字符串。

success:function()是提交成功后,在执行的函数,里面我重新加载了一下数据。不然删除了数据,页面不动看不到效果。其他参数就简单。

这个bill数组我是提交到Struts2的action里面的,所以在action里面要建立一个以checkbox的name属性值(billdel) int[] billdel;变量。第一块代码中能找到。在action中添加get/set方法。

int[] billdel;
		
	
	public int[] getBilldel() {
		return billdel;
	}

	public void setBilldel(int[] billdel) {
		this.billdel = billdel;
	}
这样action就能直接接收到了。不用做其他的。
在action中通过for循环把biildel循环出来你会发现数组的每个值就是 value值,

<input type="checkbox" name="billdel" value="${bill.id}"/>
这样就可以用id来找要删除的语句了,我用的是ssh框架,具体的在daoImpl里面:

	String hql = "delete Bill where id=?";
	@Override
	public void deleteBillsList(int[] param1) {

		Session si = factorytools.getSession();
		Query query ;
		for(int i=0;i<param1.length;i++){
			query = si.createQuery(hql);
			int param = param1[i];
			query.setInteger(0,param);
			query.executeUpdate();
		}		
	}
代码就是这样的。

希望你们看了能和我交流下用js写原生的Ajax提交删除。

补充一下:全选checkbox的js

/**
 * checkbox的全选按钮
 */
function checkAll() {
  for (var i = 0; i < document.getElementsByName("billdel").length; i++) {
   document.getElementsByName("billdel")[i].checked = document.getElementById("allchoose").checked;
  }
 }
这个是用js写的,其实你把他换成jquery的写法一样可以,逻辑反正就是这么样的。第一片jsp页面代码有全选checkbox里面有个onclick属性就是调用的这个js



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值