0

我正在尝试在 while 循环中为每个选中的项目更改背景颜色。目前 jQuery 仅适用于最后一行。我确实$i在输入 id 中放了一个变量,但老实说,我不确定除此之外还能做什么。我在 Stack Overflow 上尝试了这个.each函数和一堆答案,但我不知道如何处理这个问题。

这是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++;
4

3 回答 3

1

你为什么不直接使用 CSS 呢?

input[type="checkbox"] + label {
    // Whatever you want to do
}

input[type="checkbox"]:checked + label {
    // Whatever you want to do.
}

是一个简单的小提琴展示这一点。

于 2013-09-13T19:19:39.927 回答
1

你的问题是你试图匹配一个像org[1]PHP 输出的 id,但是你使用了一个 jQuery 选择器[$i]——这不起作用,有几个原因。

像这样的 jQuery 选择器会起作用:

$('input[id^="org\["]')

id这将选择以开头的输入元素org[。我在括号前面放了一个退格键,因为 jQuery 对括号有特殊的含义,而这“转义”了那个特殊的含义。

于 2013-09-13T19:20:05.683 回答
0

在您的 javascript 中,您使用 $i 但它是 pp 变量。实际上,您可以为此目的使用类而不是 id

<?php foreach($items as $item){ echo '<input type="checkbox" ..something else... class="dummy" />';}

在 JavaScript 中

$('.dummy').change(function(e){ //Do something that you need});
于 2013-09-13T19:17:55.600 回答