У меня есть простая функция jQuery, которая переключает классы на основе состояний флажка. Здесь код:
JQuery:
$('input[name$="bg-noise-option"]').click(function(){
var targetClass = $(this).data('at');
$('.' + targetClass).toggleClass('bg-noise');
});
HTML:
<div class="checkbox">
<label>
<input type="checkbox" name="bg-noise-option" data-at="page-wrap" checked>
Body <br>
</label>
<label>
<input type="checkbox" name="bg-noise-option" data-at="btn">
Elements <br>
</label>
<label>
<input type="checkbox" name="bg-noise-option" data-at="header, .navbar">
Top Header <br>
</label>
<label>
<input type="checkbox" name="bg-noise-option" data-at="page-header-wrap">
Page Header <br>
</label>
<label>
<input type="checkbox" name="bg-noise-option" data-at="site-footer">
Footer <br>
</label>
</div>
Вопрос: Как создать cookie для каждого флажка? Я просто пытаюсь дать этим флажкам некоторую память... не уверен в лучшем способе.
Я подозреваю, что какой-то тип .each(function)
должен это сделать, но я все еще довольно начинающий javascript. Я пробовал следующее:
$.each(function(){
$.cookie('bg-noise-cookie', $(this).data('at'), {expires:365, path: '/'});
})
Но, конечно, это создает только один куки файл для последней проверенной коробки. Как создать уникальный файл cookie для каждого? Или мне даже нужно? Возможно, есть способ сохранить их в одном файле cookie (массив?), А затем просто ссылаться на массив на загрузку страницы, чтобы проверить флажки?
Очень важно для понимания.
Предполагается, что вы используете JQuery Cookie Plugin, так как я вижу, что вы ссылались на него в своем вопросе.
Вот ты где. Создает и изменяет один файл cookie при каждом щелчке на флажке, сохраняя только те данные, которые соответствуют значениям, отмеченным флажками.
При загрузке страницы он извлекает эту строку JSON, закрывает ее обратно на объект и затем перебирает, применяя проверку в поле любого подходящего атрибута.
Код протестирован и работает.
HTML: я добавил '[]' в свои флажки, чтобы правильно группировать их и удалять отмеченные по умолчанию флажки.
<div class="checkbox">
<label>
<input type="checkbox" name="bg-noise-option[]" data-at="page-wrap">
Body <br>
</label>
<label>
<input type="checkbox" name="bg-noise-option[]" data-at="btn">
Elements <br>
</label>
<label>
<input type="checkbox" name="bg-noise-option[]" data-at="header, .navbar">
Top Header <br>
</label>
<label>
<input type="checkbox" name="bg-noise-option[]" data-at="page-header-wrap">
Page Header <br>
</label>
<label>
<input type="checkbox" name="bg-noise-option[]" data-at="site-footer">
Footer <br>
</label>
</div>
JQuery: использование плагина $.cookie()
<script type="text/javascript">
$(document).ready(function() {
// check for cookie on load
if( $.cookie('chk_ar') ) {
console.log($.cookie('chk_ar'));
var chk_ar = $.cookie('chk_ar');
// convert string to object
chk_ar = $.parseJSON(chk_ar);
console.log(chk_ar);
// loop through and apply checks to matching sets
$.each(chk_ar, function(index, value) {
console.log(value);
$('input').filter('[data-at="'+value+'"]').prop('checked', true);
});
}
});
// handle checkboxes
$('input[name="bg-noise-option[]"').on('click', function() {
var check_array = [];
// add to array
$(':checked').each(function() {
check_array.push($(this).attr('data-at'));
});
// stringify array object
check_array = JSON.stringify(check_array);
console.log(check_array);
// set cookie
$.cookie('chk_ar', check_array, {path:'/'});
});
</script>
off
и on
радио тумблер для показа / скрытия его. Это добавило некоторую сложность, но я наконец-то заработал. Можно опубликовать код, если он будет полезен для других, но воздержится, если не будет запрошено, поскольку это выходит за рамки моего вопроса. Anways, опять же, большое спасибо. Теперь я немного знаю о хранении и разборе JSON
:)
.json
из javascript. Возможно, вы могли бы включить необходимый код в ответ? В противном случае, возможно, вы могли бы поделиться некоторыми полезными ресурсами для такого подхода? Большое спасибо.