сохранение состояния флажка при перезагрузке - PullRequest
4 голосов
/ 23 июля 2010

как сохранить состояние флажка через сеансы? Я использую этот код JQuery для переключения параметров:

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

но когда я перезагружаюсь, флажки возвращаются в состояние по умолчанию. я знаю, что должен был бы использовать сеансы, но как сделать так, чтобы состояние флажка сохранялось, используя сеансы в 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>

Ответы [ 3 ]

8 голосов
/ 23 июля 2010

Чисто в JavaScript с поддержкой localStorage, если доступно, в противном случае используется 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 - Установите флажки, а затем снова «запустите» скрипт!

0 голосов
/ 23 июля 2010

Есть способ, но вам нужно сделать какой-то курс изменения, он будет работать, если вы отправляете через форму или JQuery с тем же именем параметра (здесь name_txt и ref_txt).

дайте чекбоксу ввести имя

<?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>
0 голосов
/ 23 июля 2010

Если это не то, что вам нужно сохранить в базе данных, я рекомендую использовать куки вместо сессий.Вы можете использовать легкий плагин jQuery cookie .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...