Reputation: 484
I have the following code that I'm trying to get working. What I want is to have the table rows with class "generator" show up if the checkbox is checked and removed if it is unchecked (default). I have tested jquery and I know it is loading ok so that is not the issue.
The following is my code that I have tried to adapt from jQuery checkbox event handling:
<script>
$('#gen_form input:checkbox').click(function() {
var $this = $(this);
// $this will contain a reference to the checkbox
if ($this.is(':checked')) {
$(".generator").toggle();
} else {
$(".generator").toggle();
}
});
</script>
<?php if(isset($msg)){ echo "<span id='msg'>".$msg."</span>"; }?>
<h2>Add CLLI</h2>
<form method="post" id='gen_form'>
<table class="form_table_newuser">
<tr>
<td class='tdl'>Generator</td><td class='tdr'><input type='checkbox' id='showGen' name='generator' /></td><td> </td>
</tr>
<tr class='generator'>
<td class='tdl'>Start Time</td><td class='tdr'><input type='text' name='start_time' class='textbox'/></td><td> <span class='error'>*<?php echo $errors['start_time']; ?></span></td>
</tr>
<tr class='generator'>
<td class='tdl'>End Time</td><td class='tdr'><input type='text' name='end_time' class='textbox'/></td><td> <span class='error'>*<?php echo $errors['end_time']; ?></span></td>
</tr>
I'm still pretty new to jQuery and am learning. Everything I have tried with the checkbox checking has failed. I can use a button and it worked (with different code), but I need to be able to use the checkbox. I tried a few more things before posting this that say they all deal with the checkbox but none of them have done anything at all when clicking the checkbox.
Upvotes: 5
Views: 32499
Reputation: 144689
Try putting your code inside the $(document).ready
handler, according to the structure of your markup, it sounds that you just want to select one input element, try the following:
$(document).ready(function(){
$('#showGen').change(function(){
$('.generator').css('display', this.checked ? 'block' : 'none');
// or $('.generator').toggle()
})
})
Upvotes: 2
Reputation: 14453
It is because the dom is not ready, your script runs before the elements exist.
If you wrap your script in jQuery's document ready like so it will work :-
$(function(){
$('#gen_form input:checkbox').click(function() {
var $this = $(this);
// $this will contain a reference to the checkbox
if ($this.is(':checked')) {
$(".generator").toggle();
} else {
$(".generator").toggle();
}
});
});
I tried it in jsFiddle and it worked
Upvotes: 1
Reputation: 18233
You need to wrap the function in a document ready callback, otherwise the elements don't exist at the time the handler is bound:
$(document).ready(function() {
$('#gen_form input:checkbox').click(function() {
$(".generator").toggle(); // simplifies to this
});
});
Also, jQuery .toggle()
handles hiding/showing alternately for you.
Upvotes: 10