views:

111

answers:

3

how do i save checkbox state through sessions? i'm using this jquery code to toggle the options:

$('div.check input:checkbox').bind('change',function(){
    $('#'+this.id+'txt').toggle($(this).is(':checked'));
});

but when i reload, the checkboxes are back to their default state. i know i'd have to use sessions, but how do i make the checkbox state persist using sessions in php?

html:

<div class="check">
<p><input type="checkbox" value="Name" id="name" checked /> <label for="name">Name</label></p>  
<p><input type="checkbox" value="Reference " id="reference" checked /> <label for="reference">Reference</label></p>
    </div>

    <div id="nametxt"> Show Name TEXT </div>
    <div id="reftxt"> Show Ref TEXT </div>
A: 

If it's not something that you need to save in the database I recommend using cookies instead of sessions. You can use the easy jQuery cookies plugin.

Makram Saleh
how would i store the checkbox state in the cookie. any help would be appreciated.
fuz3d
A: 

There is a way, but you need to make some change- off course it will work if you submit through form or JQuery with same parameter name (here name_txt and ref_txt).

give checkbox input a name

<?php
if(isset($_REQUEST['name_txt']))
    $name_text = $_REQUEST['name_txt'];
if(isset($_REQUEST['ref_txt']))
    $ref_text = $_REQUEST['ref_txt'];
    ?>
    <p><input type="checkbox" name = "name_txt" value="Name" id="name" <?php echo ($name_text == 'Name' || !isset($name_text))?'checked':'';?> /> 
    <label for="name">Name</label></p>  
    <p><input type="checkbox" name = "ref_txt" value="Reference " id="reference" <?php echo ($ref_text == 'Reference' || !isset($ref_text))?'checked':'';?> /> <label for="reference">Reference</label></p>
Sadat
somehow doesn't work. also i want the default value to be checked, so that the text is shown. but with this code, it shows the code even if the code is unchecked [default] on pageload.
fuz3d
tried your updated code, still doesnt work.
fuz3d
can you show your php script plz? are you submitting input through form or JQuery? how? please make it clear.
Sadat
+2  A: 

Purely in JavaScript supporting localStorage if available, otherwise using document.cookie.

function getStorage(key_prefix) {
    // this function will return us an object with a "set" and "get" method
    // using either localStorage if available, or defaulting to document.cookie
    if (window.localStorage) {
      // use localStorage:
      return {
        set: function(id, data) {
          localStorage.setItem(key_prefix+id, data);
        },
        get: function(id) {
          return localStorage.getItem(key_prefix+id);
        }
      };
    } else {
      // use document.cookie:
      return {
         set: function(id, data) {
           document.cookie = key_prefix+id+'='+encodeURIComponent(data);
         },
         get: function(id, data) {
           var cookies = document.cookie, parsed = {};
           cookies.replace(/([^=]+)=([^;]*);?\s*/g, function(whole, key, value) {
              parsed[key] = decodeURIComponent(value);
           });
           return parsed[key_prefix+id];
         }
       };
     }
  }

jQuery(function($) {
  // a key prefix is used for the cookie/storage
  var storedData = getStorage('com_mysite_checkboxes_'); 

  $('div.check input:checkbox').bind('change',function(){
    $('#'+this.id+'txt').toggle($(this).is(':checked'));
    // save the data on change
    storedData.set(this.id, $(this).is(':checked')?'checked':'not');
  }).each(function() {
    // on load, set the value to what we read from storage:
    var val = storedData.get(this.id);
    if (val == 'checked') $(this).attr('checked', 'checked');
    if (val == 'not') $(this).removeAttr('checked');
    if (val) $(this).trigger('change');
  });

});

jsFiddle demo available -- Click some checkboxes, then "Run" the script again!

gnarf
thank you! the demo works wonderfully, and in my project the checkbox state persists, but the corresponding data still displays on pageload, even if the checkbox is unchecked.
fuz3d
@fusion - might be something else entirely in a different section of code, can you post a link to the actual page, I can try to firebug it for you.
gnarf
@gnarf, thanks, but the project is not yet online. i tried to firebug it too, it doesn't throw any error as such. the only line in the above code that i changed was this `$('#ab_'+this.id).toggle($(this).is(':checked'));` . could it be because of this id change?
fuz3d
put a breakpoint on that line / the `trigger('change');` line and see if it's being run
gnarf
did that, it executes that line. funny thing is that when i put the breakpoint and executed it, it works as it should . .but without the breakpoint, it doesn't -ie, it displays the text if the checkbox is unchecked.
fuz3d