views:

216

answers:

3

The Problem
I am trying to run some ajax on one my pages for my website, basically I have three checkboxes all of which on pageload are unselected, when a checkbox is clicked I need to be able load in via ajax the relevant HTML. This system is currently a PHP script that depending on what the POST is set returns a different view, so I think all I need to is send the POST via AJAX, but I need to do everytime a new checkbox is checked.

My HTML looks like this,

    div class="segment">
               <div class="label">
                <label>Choose region: </label>
               </div>


<div class="column w190">
                    <div class="segment">
                        <div class="input">
                            <input type="checkbox" checked="checked" class="radio checked" value="Y" name="area[Nationwide]" id="inp_Nationwide">
                        </div>
                        <div class="label ">
                            <label for="inp_Nationwide">Nationwide</label>
                         </div>
                        <div class="s">&nbsp;</div>
                    </div>

</div>

<div class="column w190">
                    <div class="segment">
                        <div class="input">
                            <input type="checkbox" checked="checked" class="radio checked" value="Y" name="area[Lancashire]" id="inp_Lancashire">
                        </div>
                        <div class="label ">
                            <label for="inp_Lancashire">Lancashire</label>
                         </div>
                        <div class="s">&nbsp;</div>
                    </div>

</div>

<div class="column w190">
                    <div class="segment">
                        <div class="input">
                            <input type="checkbox" checked="checked" class="radio" value="Y" name="area[West_Yorkshire]" id="inp_West_Yorkshire">
                        </div>
                        <div class="label ">
                            <label for="inp_West_Yorkshire">West Yorkshire</label>
                         </div>
                        <div class="s">&nbsp;</div>
                    </div>
               <div class="s">&nbsp;</div>
       </div>
</div>

My current attempt was to ascertain whether the input has been clicked so I have done this with my javascript, though this is probably wrong,

$('input.radio').click(function(){
        if($(this).hasClass('clicked')) {
            $(this).removeClass('clicked');
        } else {
            $(this).addClass('clicked');
        }
    });
+1  A: 

You can do

    $('input.radio').change(function(){ // will trigger when the checked status changes
            var checked = $(this).attr("checked"); // will return "checked" or false I think.
            // Do whatever request you like with the checked status
    });

Also, if you say

three checkboxes all of which on pageload are unselected

They should have checked=""

Jasper De Bruijn
This is a great solution, how would I get the name and of the checkbox and the value into an array?
sea_1987
name and value are both attributes, so you can retrieve them the same way as the checked attribute.var array = [$(this).attr("checked"),$(this).attr("name"),$(this).attr("value")]
Jasper De Bruijn
A: 

Howdy, what about

$('input:checkbox').bind('click', function(e){
   switch(e.target.id){
       case 'someid':{
             if($(this).is(':checked')){
                //ajax call here
             }
             break;
       }
       case 'anotherid':{
             // something
             break;
       }
   }
});

Actually, you could change the arragment in checking first if the element is checked or unchecked and then switch through the id's.. hmm

Kind Regards

--Andy

jAndy
A: 
$("input:checkbox:checked")

will return all checkboxes that are currently checked.

The event handler .change() will bind to whenever the input changes, so for radios/checkboxes, it binds to whenever they're toggled, so no need to use click().

$(".radio:checkbox").change(function() {
     var boxChecked = $(this).is(":checked");
     if(boxChecked) {
         ...do ajax...
      }
 });

But this is kind of sloppy too, considering you could use the toggle() method instead. Plus, are you wanting to destroy the html when they uncheck? Or is this a one time deal?

Anthony
Um, I just tested my sample code, and it works just great. Any reason for the downvote?
Anthony