jQuery只影响while循环中的最后一个结果:MySQL

时间:2013-09-13 19:09:45

标签: jquery mysql while-loop

我正在尝试为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++;

3 个答案:

答案 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});