尝试过几种不同的方法但没有成功,所以我希望有人可以提供协助,我已经将下面的代码缩减到最基本的(也就是非功能形式),基本上我需要的是我会有大量的表行与下面显示的方式相同,但我希望每个复选框操作都能触发最近的<span>
项集的切换。
代码如下:
$(document).ready(function() {
$("input#change").change(function() {
$("span.disabled").toggle();
$("span.enabled").toggle();
$("span.pending").toggle();
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<form action="page.php" method="post">
<table>
<!-- Row 1 -->
<tr>
<td>
<span class="pending" style="display:none;">PENDING</span>
<span class="disabled">DISABLED</span>
</td>
<td>
<input type="checkbox" name="statusArray[]" id="change" value="1" />
</td>
</tr>
<!-- Row 2 -->
<tr>
<td>
<span class="pending" style="display:none;">PENDING</span>
<span class="enabled">ENABLED</span>
</td>
<td>
<input type="checkbox" name="statusArray[]" id="change" value="2" />
</td>
</tr>
</table>
</form>
如果只有一行,顶部代码可以工作,但我需要它来处理多行。
该复选框的名称始终为statusArray[]
,并标记为#change
有3个跨度,但每行只有两个,这些将是span.enabled
,span.disabled
和span.pending
有没有办法使用jquery仅在当前表行激活toggle
?我需要找出能够实现这一目标的东西。
非常感谢任何帮助。
答案 0 :(得分:2)
尝试使用此#change
课程,因为多个id
是不可能的。
使用closest('tr')
解决下面的问题代码段。请告诉我您对此的反馈。谢谢!
$(document).ready(function() {
$("input.change").change(function() {
$this = $(this).closest('tr');
$this.find("span.disabled").toggle();
$this.find("span.enabled").toggle();
$this.find("span.pending").toggle();
});
});
&#13;
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
</head>
<body>
<form action="page.php" method="post">
<table>
<!-- Row 1 -->
<tr>
<td>
<span class="pending" style="display:none;">PENDING</span>
<span class="disabled">DISABLED</span>
</td>
<td>
<input type="checkbox" name="statusArray[]" class="change" value="1" />
</td>
</tr>
<!-- Row 2 -->
<tr>
<td>
<span class="pending" style="display:none;">PENDING</span>
<span class="enabled">ENABLED</span>
</td>
<td>
<input type="checkbox" name="statusArray[]" class="change" value="2" />
</td>
</tr>
</table>
</form>
</body>
</html>
&#13;
答案 1 :(得分:1)
您不能使用重复的id
,因此请改用class
,或使用[name^=statusArray]
如果要动态添加行,请使用委托。
您可以使用closest
查找该行,然后使用find
到toggle
。
$(document).ready(function() {
$('table').on('change', '[name^=statusArray]', function() {
var row = $(this).closest('tr');
row.find("span.disabled,span.enabled,span.pending").toggle();
});
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<!-- Row 1 -->
<tr>
<td>
<span class="pending" style="display:none;">PENDING</span>
<span class="disabled">DISABLED</span>
</td>
<td>
<input type="checkbox" name="statusArray[]" class="change" value="1" />
</td>
</tr>
<!-- Row 2 -->
<tr>
<td>
<span class="pending" style="display:none;">PENDING</span>
<span class="enabled">ENABLED</span>
</td>
<td>
<input type="checkbox" name="statusArray[]" class="change" value="2" />
</td>
</tr>
</table>
&#13;
答案 2 :(得分:0)
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("input.change").change(function(e){
e.preventDefault();
$(本).parent( “TD”)的父( “TR”)的儿童( “TD”)的儿童( “span.disabled”)切换()。。 $(本).parent( “TD”)的父( “TR”)儿童( “TD”)的孩子( “span.enabled”)切换()。; $(这).parent( “TD”)的父( “TR”)的儿童( “TD”)的儿童( “span.pending”)切换(); ...
});
});
});
</script>
</head>
<body>
<form action="page.php" method="post">
<table>
<!-- Row 1 -->
<tr>
<td>
<span class="pending" style="display:none;">PENDING</span>
<span class="disabled">DISABLED</span>
</td>
<td>
<input type="checkbox" name="statusArray[]" class="change" value="1" />
</td>
</tr>
<!-- Row 2 -->
<tr>
<td>
<span class="pending" style="display:none;">PENDING</span>
<span class="enabled">ENABLED</span>
</td>
<td>
<input type="checkbox" name="statusArray[]" class="change" value="2" />
</td>
</tr>
</table>
</form>
</body>
</html>
只需将ID =“更改”更改为class =“change” 还$(“输入#change”)到$(“input.change”)
并添加$(this).parent(“td”)。parent(“tr”)。children(“td”)。children to to to the item from the class =“change”