【问题标题】:How to change color of my div if check-box is checked?如果选中复选框,如何更改我的 div 的颜色?
【发布时间】:2015-12-15 05:15:42
【问题描述】:

我有一个基于数据库记录创建的表。在 tbody 内部,我有 tr 创建每个表行。表格行有多个相同日期的时间段。如果选中复选框,我想更改时间块的背景颜色。我让我的复选框开始工作,我用警报和里面的一些文本进行了测试。现在我正在尝试更改背景颜色,但到目前为止我尝试过的这种情况下没有任何效果。这是我的代码:

 <cfoutput query="qryTest" group="DateMeeting">
         <tbody>
            <tr>
                <td>#DateMeeting#</td>
            </tr>
            <cfoutput>
               <tr class="blockRow">
                  <td>#StartTime#</td>
                  <td>#EndTime#</td>
                  <td><input type="checkbox" name="block" id="block"></td>
               </tr>
            </cfoutput>
         </tbody>
 </cfoutput>

Java 脚本:

$('input[type=checkbox]').on('change', function() {
    var div = $(this).closest('.blockRow');
    $(this).is(":checked") ? div.addClass("red") : div.removeClass("red");
});

还有我的 CSS:

.red{
   background-color:red; 
}

这是我更新的工作代码。第一个问题是在我的代码的 html 结构中。其次,如果我使用 document.getElementById('') ,无论我点击哪一行,我都只会得到第一行更改的背景颜色。所以我不得不使用getElementByClassName。无论如何,我决定使用 JQuery addClass/removeClass。感谢大家对这个问题的帮助。

【问题讨论】:

  • 你能发布你得到的错误
  • $('#blockRow').css("backgroundcolor","red") 应该是驼峰式:$('#blockRow').css("backgroundColor","red")
  • 在您对 CSS 更改的 jQuery 调用中,“backgroundcolor”需要与 CSS 中的“background-color”完全相同。 Idk 如果那是问题的话
  • 我没有收到任何错误,这是问题所在,我找不到问题所在。如果我使用警报,我的代码每次单击复选框时都会给我文本。
  • 您有多个 ID 为 #blockRow 的元素吗?在这种情况下,您应该使用 class

标签: javascript jquery html css


【解决方案1】:

试试这个:

$('input[type=checkbox]').on('change', function() {
    var div = $(this).closest('.blockRow');
    $(this).is(":checked") ? div.addClass("red") : div.removeClass("red");
});

.red{
    background-color:red; 
}

<cfoutput query="qryTest" group="DateMeeting">
    <tbody>
        <tr>
            <td>#DateMeeting#</td>
            <cfoutput>
                     <div class="blockRow">
                     <td>#StartTime#</td>
                     <td>#EndTime#</td>
                     <td><input type="checkbox" name="block" id="block"></td>
                 </div>
            </cfoutput>
        </tr>
    </tbody>
</cfoutput>

jsfiddle:

https://jsfiddle.net/3s83gj70/2/

这将获得最接近当前复选框的块行,因此应该与多个实例一起使用。由于您不能有 2 个具有相同 id 的元素,因此我将 blockrow 更改为该类。

如果你想基于相同的条件做其他事情,那么你可以这样做:

$('input[type=checkbox]').on('change', function() {
    var div = $(this).closest('.blockRow');
    if($(this).is(":checked")){
        div.addClass("red");
        //checkbox is checked, do something
    }
    else
    {
        div.removeClass("red");
        //checkbox is not checked, do something else
    }
});

【讨论】:

  • 有一个jQuery标签,所以这是一个合理的假设
  • 我如何为复选框设置不同的值取决于我的复选框是选中还是未选中?
  • 我添加了一个编辑,您只需在if else 的右侧设置您想要的值,但是,如果您在选中复选框时发布表单,则该值将为 true ,如果未选中,则该值将为 false 或根本不发送。如果您必须定义其他值,则复选框可能不是您要执行的操作的正确输入。
【解决方案2】:

简单:

 $('#blockRow').css("background-color","red")
 ------------------------------^

编辑

那么你不包括 jQuery 库。要制作纯js,请这样做:

http://jsfiddle.net/bfss81sa/

 document.getElementById("box").style.backgroundColor = "red";

这里是完整的 sn-p:

  var cbs = document.querySelectorAll('input[type=checkbox]');
  for(var i = 0; i < cbs.length; i++) {
    cbs[i].addEventListener('change', function() {
      if(this.checked) {
        document.getElementById("box").style.backgroundColor = "red";
      } else {
        document.getElementById("box").style.backgroundColor = "transparent";
      }
    });
  }
<input type="checkbox" name="block" id="block">
<div id="box">
The box
</div>

【讨论】:

  • 这可行,但您需要适应您的代码。我看到你接受了另一个答案,但这段代码运行良好。
【解决方案3】:

您的 html 代码是一团糟。无论如何,一般来说:

$('input[type=checkbox]').click(function() {
  if($(this).is(':checked') {
    $(this).parents('tr').find('td:first').css('background', 'red'); 
  } else {
    $(this).parents('tr').find('td:first').css('background', 'white');
 }
});

当然,您可以缩小 input:checkbox 选择器的范围。 如果它不是您的&lt;tr&gt; 中的第一个&lt;td&gt;,那么您最好为它分配一个类并使用它。

注意:DOM 必须正确 &lt;cfoutput&gt; 不能是 &lt;tr&gt; 的子级; &lt;div&gt; 不能将 &lt;td&gt; 作为直接子代;不正确的 DOM 会影响 javascript 遍历。

【讨论】:

  • 您假设包含 jQuery 库。
  • 相当 :) 简单多了。
  • 这段代码在我的表格之外改变颜色。但至少适用于点击。所以我猜标签有问题。
  • 可能是结构错误的 html。在您的示例中显示您的最终 html 输出,因为这不是有效的 html。 DOM 必须是正确的。
  • 我使用了你的代码,而不是 parents('div') 我使用了 parents('tr')。我有一个问题,如果我点击第一行,我所有的 td 都会改变颜色。但是对于所有其他行都可以正常工作。所以我想要所有 td,但第一个 td 保存日期。这就是为什么我使用 div 但这不起作用。
猜你喜欢
  • 1970-01-01
  • 2017-01-08
  • 2016-01-14
  • 2011-08-16
  • 2022-12-18
  • 2021-12-26
  • 2023-03-23
  • 1970-01-01
  • 2022-01-24
相关资源
最近更新 更多