Show or hide table row if checkbox is checked

19,055

Solution 1

trigger .change() event after you attach events:

$(function () {
    $('#checkbox1, #checkbox2').change(function () {
        var row = $(this).closest('tr').prev();

        if (!this.checked)
            row.fadeIn('slow');
        else 
            row.fadeOut('slow');

    }).change();
});

Note: I make code shorter.

jsfiddle

Solution 2

Just call the change event after you initially register it:

$(document).ready(function () {
    $('#checkbox').change(function () {
        if (!this.checked) 
            $('#row').fadeIn('slow');
        else 
            $('#row').fadeOut('slow');
    });
    $('#checkbox').change();
});

Solution 3

I believe this is what you were looking for:

$(function() {
  var init = true;
  $('input[type="checkbox"]').change(function() {
    if (this.checked) {
      if (init) {
        $(this).prev().hide();
        init = false;
      } else $(this).prev().slideUp();
    } else $(this).prev().slideDown();
  }).change();
});
input[type='text'] {
  display: block;
  padding: 3px 5px;
  margin: 5px 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div>
  <input type="text" placeholder="Shown" />
  <input type="checkbox" />Hide input
</div>

<div>
  <input type="text" placeholder="Hidden" />
  <input type="checkbox" checked/>Hide input
</div>

Solution 4

just call the change function in document.ready after it

 $('#checkbox').change();

Like this

$(document).ready(function () {

    $('#checkbox').change(function () {
        if (!this.checked) $('#row').fadeIn('slow');
        else $('#row').fadeOut('slow');
    });
    $('#checkbox').change();
});

Here is the DEMO FIDDLE

Solution 5

Musefan's answer is excelent, but following is also another way!

$(document).ready(function () {
($('#checkbox').prop('checked')==true) ? $('#row').fadeOut('slow'):$('#row').fadeIn('slow');
    $('#checkbox').change(function () {
        if (!this.checked) 
            $('#row').fadeIn('slow');
        else 
            $('#row').fadeOut('slow');
    });
});
Share:
19,055
Duncan Lukkenaer
Author by

Duncan Lukkenaer

Updated on June 12, 2022

Comments

  • Duncan Lukkenaer
    Duncan Lukkenaer almost 2 years

    I want to hide a table row (with input fields inside) when a checkbox is checked. I found something that works:

    HTML

    <table>
        <tr id="row">
            <td><input type="text"></td>
            <td><input type="text"></td>
        </tr>
        <tr>
            <td><input type="checkbox" id="checkbox">Hide inputs</td>
        </tr>
    </table>
    

    Script

    $(document).ready(function () {
        $('#checkbox').change(function () {
            if (!this.checked) 
                $('#row').fadeIn('slow');
            else 
                $('#row').fadeOut('slow');
        });
    });
    

    Fiddle

    But this only works if the checkbox is not checked already. So if the checkbox is checked at the beginning, I want the table row to be hidden. How do I do this?

    Please note that I don't know much about JavaScript, but I really need this