jquery两个方法作用于同一个复选框时,会有一个方法失效

6幽灵9 发布于 2017/03/16 18:54
阅读 154
收藏 1

需要实现的功能是:

1.实现父选框改变时子选框的全选与反选

2.选择子选矿时,父选框要被自动勾选,而父选框下的子选框都被取消时,父选框自动取消勾选。

现在功能1和功能2可以被实现其中的一个,就是第一个被操作的方法,之后第二个方法就会失效,请问有人知道这是为什么吗?

 代码如下:

<script>
		function change1(obj, id) {
			if (obj.checked) {
				$("#m" + id).attr("checked", true);
			} else {
				if ($("[mid=" + id + "]:checked").length == 0) {
					$("#m" + id).attr("checked", false);
				}
			}
		}
		function change2(obj2, id2) {
			if (obj2.checked) {
				$("[mid=" + id2 + "]").attr("checked", true);
			} else {
				$("[mid=" + id2 + "]").attr("checked", false);
			}
		}
	</script>
<td><c:forEach items="${menus}" var="m">
							<c:if test="${m.pid==0}">
								<input type="checkbox" id="m${m.id}" name="mids" value="${m.id}"
									onchange="change2(this,${m.id})" />${m.mname}<br />
								<c:forEach items="${menus}" var="m2">
									<c:if test="${m.id==m2.pid}">
                    	&nbsp;&nbsp;&nbsp;<input mid="${m.id}"
											type="checkbox" name="mids" value="${m2.id}"
											onchange="change1(this,${m.id})" />${m2.mname}<br />
									</c:if>
								</c:forEach>
							</c:if>
						</c:forEach></td>

 

加载中
0
6幽灵9
6幽灵9

已解决,将arrt改为prop就可以了,因为checked属于为原型对象的属性。而attr在remove原型对象时会出错。原型对象指的是自身自带的,无法移除。prop会忽略这个错误。而attr操作的是普通非原型对象(可移除)。js 的dom对象属性是可以随意增加的。

返回顶部
顶部