选中复选框时如何更改 table 行内输入文本的背景颜色

How to change the background color of input text inside a table row when a checkbox is checked

我想更改包含在 table 行的 td 内的输入 text/textarea 的背景颜色,数据来自数据库,每一行都包含复选框,因此当单击该复选框时输入文本的背景颜色将改变。

$('#myTable .nrml').click(function() {
  var currentRow = $(this).closest("tr");
  var col4 = currentRow.find("td:eq(1)").html();
  alert(col4);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table border='1' id="myTable">
  <tr>

    <th>Parameter</th>
    <th>Result</th>
    <th>Normal</th>
    <th>Abornaml Values</th>
    <th>Normal Values</th>
    <th>Critical Values</th>

  </tr>
  <tr>
    <td>Glucose</td>
    <td><input class="txtbox" type="text"></td>
    <td><input type="checkbox" class="nrml"></td>
    <td><input type="checkbox" class="abnrml"></td>
    <td>60-80</td>
    <td>110-120</td>

  </tr>
  <tr>
    <td>Lipid</td>
    <td><input class="txtbox" type="text"></td>
    <td><input type="checkbox" class="nrml"></td>
    <td><input type="checkbox" class="abnrml"></td>
    <td>55-90</td>
    <td>100-180</td>

  </tr>
  <tr>
    <td>Keratine</td>
    <td><input class="txtbox" type="text"></td>
    <td><input type="checkbox" class="nrml"></td>
    <td><input type="checkbox" class="abnrml"></td>
    <td>10-15</td>
    <td>16-20</td>

  </tr>
  <tr>
    <td>Pressusre</td>
    <td><textarea></textarea></td>
    <td><input type="checkbox" class="nrml"></td>
    <td><input type="checkbox" class="abnrml"></td>
    <td>10-15</td>
    <td>16-20</td>

  </tr>

</table>

像这样?

toggleClass 与选中的布尔值一起使用

$('#myTable .nrml').click(function() {
  $(this).closest("tr")
   .find("input[type=text], textarea")
   .toggleClass('nrml',this.checked);
});
textarea.nrml,input[type=text].nrml { background-color: green }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table border='1' id="myTable">
  <tr>

    <th>Parameter</th>
    <th>Result</th>
    <th>Normal</th>
    <th>Abornaml Values</th>
    <th>Normal Values</th>
    <th>Critical Values</th>

  </tr>
  <tr>
    <td>Glucose</td>
    <td><input class="txtbox" type="text"></td>
    <td><input type="checkbox" class="nrml"></td>
    <td><input type="checkbox" class="abnrml"></td>
    <td>60-80</td>
    <td>110-120</td>

  </tr>
  <tr>
    <td>Lipid</td>
    <td><input class="txtbox" type="text"></td>
    <td><input type="checkbox" class="nrml"></td>
    <td><input type="checkbox" class="abnrml"></td>
    <td>55-90</td>
    <td>100-180</td>

  </tr>
  <tr>
    <td>Keratine</td>
    <td><input class="txtbox" type="text"></td>
    <td><input type="checkbox" class="nrml"></td>
    <td><input type="checkbox" class="abnrml"></td>
    <td>10-15</td>
    <td>16-20</td>

  </tr>
  <tr>
    <td>Pressusre</td>
    <td><textarea></textarea></td>
    <td><input type="checkbox" class="nrml"></td>
    <td><input type="checkbox" class="abnrml"></td>
    <td>10-15</td>
    <td>16-20</td>

  </tr>

</table>

试试这个代码它会解决你的问题

$('#myTable .nrml').click(function() { var currentRow=$(this).closest("tr"); var col4=currentRow.find("td:eq(1) input").addClass("red"); });

css :

.red{ background-color: red }

使用 .toggleClass() 方法应用 class 其中包含 css 作为输入。

$('input.nrml').on('click', function() {
var currentRow=$(this).closest("tr");
 var col4=currentRow.find("td:eq(1)").find('input[type=text], textarea');
 col4.toggleClass('textboxBgColor',this.checked);
});
.textboxBgColor {
  background: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<table border='1' id="myTable">
  <tr>

    <th>Parameter</th>
    <th>Result</th>
    <th>Normal</th>
    <th>Abornaml Values</th>
    <th>Normal Values</th>
    <th>Critical Values</th>

  </tr>
  <tr>
    <td>Glucose</td>
    <td><input class="txtbox" type="text"></td>
    <td><input type="checkbox" class="nrml"></td>
    <td><input type="checkbox" class="abnrml"></td>
    <td>60-80</td>
    <td>110-120</td>

  </tr>
  <tr>
    <td>Lipid</td>
    <td><input class="txtbox" type="text"></td>
    <td><input type="checkbox" class="nrml"></td>
    <td><input type="checkbox" class="abnrml"></td>
    <td>55-90</td>
    <td>100-180</td>

  </tr>
  <tr>
    <td>Keratine</td>
    <td><input class="txtbox" type="text"></td>
    <td><input type="checkbox" class="nrml"></td>
    <td><input type="checkbox" class="abnrml"></td>
    <td>10-15</td>
    <td>16-20</td>

  </tr>
  <tr>
    <td>Pressusre</td>
    <td><textarea></textarea></td>
    <td><input type="checkbox" class="nrml"></td>
    <td><input type="checkbox" class="abnrml"></td>
    <td>10-15</td>
    <td>16-20</td>

  </tr>

</table>

小心这里会弹出的一些答案,它们很脆弱(更改您的 html 可能会破坏您的代码)。

我推荐阅读:Decoupling Your HTML, CSS, and JavaScript

您会立即意识到,如果有人决定换行您的文本区域,或将您的 table 更改为 <div> 因为他们想使用 bootstrap,您的代码没有更长的作品(脆弱的代码)。

相反,介绍一些 class描述您要执行的操作的元素:

.input-bg-container

.js-bg-trigger

.input-bg-active

.input-bg-target

更新您的 html:

<tr class="input-bg-container">
 <td>Glucose</td>
 <td><input class="txtbox input-bg-target" type="text"></td>
 <td><input type="checkbox" class="nrml js-input-bg"></td>
 <td><input type="checkbox" class="abnrml"></td>
 <td>60-80</td>
 <td>110-120</td>
</tr>

更新您的 jQuery:

$('.input-bg-container .js-input-bg').on('click', function() {
  var $this = $(this);
  var isChecked = $this.prop('checked');
  var $container = $this.closest('.input-bg-container');
  var $target = $container.find('.input-bg-target');
  var $target.toggleClass('input-bg-active', isChecked);
});

现在将任何 css 应用到您想要的活动 class。

你只需要更新你的脚本,当你选中相应的复选框时输入字段的背景颜色会改变,但输入字段必须有值否则颜色不会改变

<script type="text/javascript">
    $('#myTable .nrml').click(function() {
        var currentRow=$(this).closest("tr");
        var val = currentRow.find("td:eq(1) input").val();
        if (val && this.checked == true) {
            var col4=currentRow.find("td:eq(1) input").css('background-color','green');
        } else {
            var col4=currentRow.find("td:eq(1) input").css('background-color','');
        }
});
</script>