我正在尝试为while循环中的每行中的每个已检查项目进行背景颜色更改。目前,jQuery仅适用于最后一行。我确实在输入id中放了一个$i
变量,但说实话,我不知道该怎么办。我尝试了this,.each
函数和Stack Overflow上的一堆答案,但我无法弄清楚如何处理这个问题。
这是jQuery:
$(document).ready(function(){
$('#org[$i]').change(function(){
if(this.checked){
$(this).siblings('table').removeClass('unchecked');
$(this).siblings('table').addClass('checked');
$(this).parentsUntil('td').removeClass('unchecked');
$(this).parentsUntil('td').addClass('checked');
} else {
$(this).siblings('table').removeClass('checked');
$(this).siblings('table').addClass('unchecked');
$(this).parentsUntil('td').removeClass('checked');
$(this).parentsUntil('td').addClass('unchecked');
}
});
});
这是循环(删除了一些不重要的东西)。 $i
在每个#org
中正确迭代(我在Firebug中检查过):
if ($i % 4 == 0) echo ($i > 0? '</tr>' : '') . '<tr>';
echo "<td class=\"unchecked\">
<div class=\"unchecked\">
<input id=\"org[".$i."]\" style=\"float:right\" type=\"checkbox\" name=\"org\" value=\"".$row['i_id']."\"/>
<table class=\"unchecked\">
//blah, blah, blah
</table>
</div>
</td>';
if ($i == $countRows - 1)
echo '</tr>';
$i++;
答案 0 :(得分:1)
为什么不直接使用CSS?
input[type="checkbox"] + label {
// Whatever you want to do
}
input[type="checkbox"]:checked + label {
// Whatever you want to do.
}
here显示了这一点。
答案 1 :(得分:1)
你的问题是你试图匹配像org[1]
这样的id作为PHP的输出,但是你正在使用带有[$i]
的jQuery选择器 - 这不起作用,因为有几个原因。
这样的jQuery选择器会起作用:
$('input[id^="org\["]')
这将选择以id
开头的org[
的输入元素。我在括号前放置了一个退格区,因为jQuery对括号有特殊含义,这就“逃脱”了这种特殊含义。
答案 2 :(得分:0)
在你的javascript中你使用$ i但它是pp变量。实际上你可以使用class not id来实现这个目的
<?php foreach($items as $item){ echo '<input type="checkbox" ..something else... class="dummy" />';}
在javascript中
$('.dummy').change(function(e){ //Do something that you need});