【问题标题】:jQuery only affects the last result in a while loop: MySQLjQuery 只影响 while 循环中的最后一个结果:MySQL
【发布时间】:2013-09-18 13:37:01
【问题描述】:

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

【问题讨论】:

  • 为什么在javascript中使用#org[$i]?而不是#org[0], #org[1], #org[2],...
  • 数组中的项数一直在变化

标签: jquery mysql while-loop


【解决方案1】:

在您的 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});

【讨论】:

  • 我更擅长 jquery(这没什么好说的)。我不知道如何处理你的信息。对不起。
  • jQuery 是 javascript。您将 ID 添加到您的输入中,但如果它们执行类似我在示例 class='class_name' 中编写的操作并在 jquery 中使用它来对此类的所有输入做出反应,而不是为每个 id 编写代码,则可以向它们添加类。与上面示例中的 javascript 一致,使用 jquery 中的类来对具有类 dummy 的元素的所有更改做出反应。
【解决方案2】:

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

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

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

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

【讨论】:

  • 我试过了,这个(如果可行的话)应该可以解决所有问题
  • 我通常发现将工作从 JS 转移到 CSS 是件好事。这是一个聪明的解决方案。 +1
【解决方案3】:

您的问题是您试图匹配像 org[1] 这样的 ID 作为 PHP 的输出,但您使用的是带有 [$i] 的 jQuery 选择器 - 由于某些原因,这不起作用。

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

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

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

【讨论】:

  • 我差不多明白了。你能告诉我如何在代码中做到这一点吗?我需要为此创建一个特殊功能吗?
  • 不客气,很高兴你自己解决这个问题。我经常发现你自己的经验教训是最好的。仔细看看下面@Justin Wood 的回答——他的支持来自我。这是一种非常聪明且简单的方法,无需任何脚本即可完成此任务。
猜你喜欢
  • 1970-01-01
  • 2011-09-26
  • 1970-01-01
  • 1970-01-01
  • 2012-11-15
  • 2021-09-24
  • 1970-01-01
  • 1970-01-01
  • 2012-09-11
相关资源
最近更新 更多