Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Как сохранить значение checkbox при перезагрузки по классу (https://javascript.ru/forum/css-html/78938-kak-sokhranit-znachenie-checkbox-pri-perezagruzki-po-klassu.html)

svileff 25.11.2019 02:44

Как сохранить значение checkbox при перезагрузки по классу
 
Есть формы
<input class="t-checkbox js-store-filter-opt-chb" type="checkbox" name="3W Clinic">

<input class="t-checkbox js-store-filter-opt-chb" type="checkbox" name="Esthetic House">

<input class="t-checkbox js-store-filter-opt-chb" type="checkbox" name="Koelf">

и т.д. класс у них у всех одинаковый а name разные. Необходимо сохранить значение при перезагрузки. Пытался сам но не получается. Помогите пожалуйста.

побывал и так
<script>
$(document).ready(function() {

$.cookie('pname', $('input[name=3W Clinic]:checked').val() , {
expires: 1
});
$("input[name=3W Clinic]:checked").val($.cookie('pname'));
});
</script>

и так

<script>
$(document).ready(function() {
var vibor = (".js-store-filter-opt").val();
$.cookie('pname', vibor).val() , {
expires: 1
});
$("input[name=3W Clinic]:checked").val($.cookie('pname'));
});
</script>

Vlasenko Fedor 25.11.2019 02:51

Используйте LocalStorage не зачем cookie там

svileff 25.11.2019 23:19

Попробовал так не работает

<script type="text/javascript">
var vibor = $('input[name=brand]:hidden').val();
$.localStorage.setItem('pname', vibor);
$("input[name=brand]:hidden").val($.localStorage.getItem('pname'));
</script>

может ошибка где?

рони 26.11.2019 00:14

Цитата:

Сообщение от svileff
может ошибка где?

а где change?

рони 26.11.2019 00:17

svileff,
https://javascript.ru/forum/jquery/5...tml#post394089

svileff 26.11.2019 00:30

У меня структура странная поэтому всяка пытаюсь. Сама структура:

<div class="t-store__filter__item-controls-container">
<input type="hidden" class="js-store-filter-opt" name="brand" data-info-type="array">

<label class="t-checkbox__control t-descr t-descr_xxs">
<input class="t-checkbox js-store-filter-opt-chb" type="checkbox" name="3W Clinic">
<div class="t-checkbox__indicator"></div>3W Clinic
</label>

<label class="t-checkbox__control t-descr t-descr_xxs">
<input class="t-checkbox js-store-filter-opt-chb" type="checkbox" name="Elizavecca">
<div class="t-checkbox__indicator"></div>Elizavecca
</label>

<label class="t-checkbox__control t-descr t-descr_xxs">
<input class="t-checkbox js-store-filter-opt-chb" type="checkbox" name="Esthetic House">
<div class="t-checkbox__indicator"></div>Esthetic House
</label>

<label class="t-checkbox__control t-descr t-descr_xxs">
<input class="t-checkbox js-store-filter-opt-chb" type="checkbox" name="Koelf">
<div class="t-checkbox__indicator"></div>Koelf
</label>

</div>

есть input который сохраняет результат нажатие name="brand" побывал его сохранять. Если галочки нажаты то выдает:

value="3W Clinic&&Elizavecca&&Esthetic House&&Koelf"

как грамотно сохранить результат нажатие.

рони 26.11.2019 00:54

svileff,
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[html run]
... минимальный код страницы с вашей проблемой
[/html]

О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

рони 26.11.2019 00:55

Цитата:

Сообщение от svileff
как грамотно сохранить результат нажатие.

ссылка на код пост#5

рони 26.11.2019 01:03

svileff,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
 </head>

<body>
<div class="t-store__filter__item-controls-container">
<input type="hidden" class="js-store-filter-opt" name="brand" data-info-type="array">

<label class="t-checkbox__control t-descr t-descr_xxs">
<input class="t-checkbox js-store-filter-opt-chb" type="checkbox" name="3W Clinic">
<div class="t-checkbox__indicator"></div>3W Clinic
</label>

<label class="t-checkbox__control t-descr t-descr_xxs">
<input class="t-checkbox js-store-filter-opt-chb" type="checkbox" name="Elizavecca">
<div class="t-checkbox__indicator"></div>Elizavecca
</label>

<label class="t-checkbox__control t-descr t-descr_xxs">
<input class="t-checkbox js-store-filter-opt-chb" type="checkbox" name="Esthetic House">
<div class="t-checkbox__indicator"></div>Esthetic House
</label>

<label class="t-checkbox__control t-descr t-descr_xxs">
<input class="t-checkbox js-store-filter-opt-chb" type="checkbox" name="Koelf">
<div class="t-checkbox__indicator"></div>Koelf
</label>

</div>
<script>
(function(b) {
    var e = document.querySelectorAll(b),
        a = localStorage.getItem(b),
        a = (a = JSON.parse(a)) || (a = {}, localStorage.setItem(b, JSON.stringify(a)));
    e.forEach(function(c, d) {
        void 0 !== a[d] && (c.checked = a[d]);
        c.addEventListener("change", function() {
            a[d] = c.checked;
            localStorage.setItem(b, JSON.stringify(a))
        })
    })
})(".t-checkbox");
</script>
</body>
</html>

svileff 26.11.2019 07:48

не срабатывает! И что за b значение передается?

рони 26.11.2019 07:50

svileff,
b класс input.
Цитата:

Сообщение от svileff
не срабатывает!

браузер какой? здесь код проверяли? посмотреть, выбрать чекбоксы, снова посмотреть.

svileff 26.11.2019 07:53

Структуру я не могу изменить эта проект на Тильде

svileff 26.11.2019 07:58

Я не могу понять как правильно записать это для Тильды. Нашёл пример скрипта. Который тильда принимает. Запись в таком виде.

<script>
$( document ).ready(function() {
var formID = '#rec110219707 .t-form';
$('input[name="controlnum"]').next('.t-calc__wrapper').children('.t-calc').addClass('maintrigger');
$(formID+' .js-successbox').css('opacity' , '0');
$("body").on('DOMSubtreeModified', ".maintrigger", function() {
var total = $('.maintrigger').html();
switch (total) {
case '1':$(formID).attr('data-success-url', 'https://yandex.ru');break;
case '2':$(formID).attr('data-success-url', 'https://google.ru');break;
case '3':$(formID).attr('data-success-url', 'https://mail.ru');break;
};
});
});
</script>

Или надо библиотеки подключать?

рони 26.11.2019 08:00

svileff,
скрипт нужно поставить вниз страницы, никаких дополнительных библиотек не требуется.

svileff 26.11.2019 08:10

Поставил но результата нет!
Вот ссылка на саму страницу, там есть фильтр. Его то я и не могу заставить сохранятся.

https://lowo.store/face

рони 26.11.2019 08:29

svileff,
нет у вас (".t-checkbox .js-store-filter-opt-chb");!!! пропуск уберите
есть (".t-checkbox.js-store-filter-opt-chb");

laimas 26.11.2019 08:32

Нужно запоминать наборы не всех, а состояние у их родителей.

svileff 26.11.2019 08:38

Сделал так. Не сохраняет!!!

<script>
(function(b) {
var e = document.querySelectorAll(b),
a = localStorage.getItem(b),
a = (a = JSON.parse(a)) || (a = {}, localStorage.setItem(b, JSON.stringify(a)));
[].forEach.call(e, function(c, d) {
void 0 !== a[d] && (c.checked = a[d]);
c.addEventListener("change", function() {
a[d] = c.checked;
localStorage.setItem(b, JSON.stringify(a))
})
})
})(".t-checkbox.js-store-filter-opt-chb");
</script>

laimas 26.11.2019 08:40

svileff,
если вы добавите/удалите в любой группе правило, то все развалится, то же самое произойдет если будут добавлены/удалены группы. Сохранять нужно не под индексами, а под именованными свойствами, а свойства, которые на текущий момент не имеют адресата, удалять.

svileff 26.11.2019 08:44

Не совсем понял как это сделать

рони 26.11.2019 08:45

svileff,
надо работать с устройством вашего фильтра, а не с checkbox

svileff 26.11.2019 08:49

Фильтр идет стандартный у него нет не каких настроек. Поэтому к нему не могу подобраться.

laimas 26.11.2019 08:51

Цитата:

Сообщение от svileff
Не совсем понял

У вас кастомные списки, родителями которых являются DIV. Эти родители имеют общий класс t-store__filter__item t-store__filter__item_checkbox, но не имеют уникальных признаков. Если сохранять в памяти весь набор флажков под индексами от 0 до N, то, к примеру, изменив порядок следования на странице этих DIV, память "пометит" уже не те, что были сохранены. То же самое и с флажками.

В память нужно писать имя выбранного флажка, который затем и будет выбираться. Но так можно поступать, если имя каждого флажка во всех наборах уникальное. Если нет, то родителям (DIV) также нужно дать уникальные признаки, под которыми будут храниться наборы выбранных их флажков.

svileff 26.11.2019 08:58

Я побывал назначить id для каждого inputa не выходит, тильда не дает

laimas 26.11.2019 09:02

Цитата:

Сообщение от svileff
Я побывал назначить id для каждого inputa

А этого не требуется. Плохо, что имена флажков имеют такое "гидрофильное масло", по разумению такое должны иметь их свойства value. Но тоже можно. Я не хочу разбираться, одно ли молочко во всех полях или нет, но именно это нужно запоминать, если это и есть уникальный признак.

рони 26.11.2019 09:03

svileff,
убрать прежний добавить этот вниз, перед </body>
<script>
(function(b) {
    var e = document.querySelectorAll(b),
        a = localStorage.getItem(b),
        a = (a = JSON.parse(a)) || (a = {}, localStorage.setItem(b, JSON.stringify(a)));
   var time = 100;
    e.forEach(function(c, d) {
        if(a[d] == true) {time += 150,  window.setTimeout(function() {
       $(c).trigger("click")
    }, time)};});
        document.addEventListener("click", function() {
            e.forEach(function(c, d) {
                a[d] = c.checked;
            })
            localStorage.setItem(b, JSON.stringify(a))
        })
})(".t-checkbox.js-store-filter-opt-chb");
</script>

рони 26.11.2019 09:22

svileff,
низ страницы, это там где у вас скрипт Yandex.Metrika, после него, и добавьте, между метрикой и body

svileff 26.11.2019 09:39

тильда не дает вниз поставить, толь ка на верх перед boby

рони 26.11.2019 09:57

Цитата:

Сообщение от svileff
тильда не дает вниз поставить

:blink:
тогда так
$(function() {
(function(b) {
    var e = document.querySelectorAll(b),
        a = localStorage.getItem(b),
        a = (a = JSON.parse(a)) || (a = {}, localStorage.setItem(b, JSON.stringify(a)));
   var time = 100;
    e.forEach(function(c, d) {
        if(a[d] == true) {time += 150,  window.setTimeout(function() {
       $(c).trigger("click")
    }, time)};});
        document.addEventListener("click", function() {
            e.forEach(function(c, d) {
                a[d] = c.checked;
            })
            localStorage.setItem(b, JSON.stringify(a))
        })
})(".t-checkbox.js-store-filter-opt-chb");
});

svileff 26.11.2019 10:23

так не срабатывает...

рони 26.11.2019 10:37

svileff,
пробуйте
addEventListener("load", function() {
(function(b) {
    var e = document.querySelectorAll(b),
        a = localStorage.getItem(b),
        a = (a = JSON.parse(a)) || (a = {}, localStorage.setItem(b, JSON.stringify(a)));
   var time = 100;
    e.forEach(function(c, d) {
        if(a[d] == true) {time += 150,  window.setTimeout(function() {
       $(c).trigger("click")
    }, time)};});
        document.addEventListener("click", function() {
            e.forEach(function(c, d) {
                a[d] = c.checked;
            })
            localStorage.setItem(b, JSON.stringify(a))
        })
})(".t-checkbox.js-store-filter-opt-chb");
});

svileff 26.11.2019 10:45

нечего не произошло.

svileff 26.11.2019 10:53

Все заработало поставил после основных скриптов и заработало.

рони 26.11.2019 11:05

Цитата:

Сообщение от svileff
так не срабатывает...

срабатывает!

svileff 04.12.2019 21:47

Не на всех браузерах работает как это можно исправить?

SuperZen 04.12.2019 22:01

в этом проверяли ;)? https://netscape-browser.en.softonic.com/

svileff 04.12.2019 22:31

Работает только в Експлорере. В Хроме, Опере и Мазиле не работает.

SuperZen 04.12.2019 22:38

можно поверить наоборот, а эксплорер какой версии был?

svileff 04.12.2019 22:44

Версия не знаю какая но Win10 стоит.

svileff 04.12.2019 22:45

Может библиотеки нахватает?


Часовой пояс GMT +3, время: 13:19.