Jquery cookie сохранить выбор нескольких <select>

0

Похоже, что это было задано несколько раз в прошлом, но по какой-то причине вопросы остаются без ответа.

Я пытаюсь сохранить выбор нескольких входов. Я использую этот код, который я нашел здесь в stackoverflow, но он сохраняет только первый выбор.

$(function() {
  if($.cookie('remember_select') != null) {
    $('.select_class option[value="' + $.cookie('remember_select') + '"]').attr('selected', 'selected');
  }
  $('.select_class').change(function() {
    $.cookie('remember_select', $('.select_class option:selected').val(), {expires: 365, path: '/'});
  });
});

благодаря

Вот работа, с которой я столкнулся...

<select class="select_class" id="foo" name="foo">
  <option value="1">1</option>
  <option value="2">2</option>
</select>

$(function(){                                                                                      
    var selectbox=$('#setup').find('.select_class'), selectboxCookieName='selection';
        selectbox.each(function(){
        $(this).prop('value', $.cookie(selectboxCookieName + '|' + this.name));
    });

    selectbox.change(function(){
        if(this.value){
            $.cookie(selectboxCookieName + '|' + this.name, this.value,{
                expires: 365
            });
        }else{
            $.removeCookie(selectboxCookieName + '|' + this.name);
        }
    });
});
Теги:
cookies
html-select

2 ответа

0

Вот решение, которое я понял...

<select class="select_class" id="foo" name="foo">
  <option value="1">1</option>
  <option value="2">2</option>
</select>

$(function(){                                                                                      
  var selectbox=$('#setup').find('.select_class'), selectboxCookieName='selection';
  selectbox.each(function(){
    $(this).prop('value', $.cookie(selectboxCookieName + '|' + this.name));
  });

  selectbox.change(function(){
    if(this.value){
        $.cookie(selectboxCookieName + '|' + this.name, this.value,{
            expires: 365
        });
    }else{
        $.removeCookie(selectboxCookieName + '|' + this.name);
    }
  });
});
  • 0
    Остерегайтесь того, что вы создаете cookie для каждого элемента select, но количество cookie ограничено для каждого браузера и, например, для Internet Explorer в зависимости от его версии в среднем составляет около 20 cookie для каждого имени домена
  • 0
    Спасибо за информацию, Борис, я этого не знал. На данный момент это работает для моих нужд, но я постараюсь найти более сложное решение в будущем. :)
0

В этом случае значение cookie будет переопределено с каждым изменением в определенном элементе select. Вам необходимо изменить сохранение файлов cookie, чтобы вы могли различать разные элементы. например: сохранить в том же файле cookie список значений для каждого элемента управления {"element1": "option 1", "elementX": "optionY"}, что-то вроде:

var controlId =  $('.select_class).attr("id"); //assume id is elementX
var controlValue = $('.select_class option:selected').val(); //assume value is optionX
var oldValue = $.parseJSON($.cookie('remember_select'));
var data = {};
data[controlId] = controlValue; //now data is {"elementX":"optionX"}
var newValue = $.extend({}, oldValue, data); //add or replace the value for elementX 
$.cookie('remember_select', JSON.stringify(newValue), {expires: 365, path: '/'});

Теперь вам нужно обновить соответствующий код, чтобы получить значение для определенного элемента управления, например:

var data = $.parseJSON($.cookie('remember_select')); // json object
var controlValue = data[controlId];
  • 0
    Спасибо за ваше время и ваш ответ, Борис, но, к сожалению, я не понимаю ваш код, он немного сложнее, чем мои знания обо всем этом. Я буду продолжать играть с этим и посмотрю, чему я могу научиться.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню