Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.11.2020, 11:21
Аспирант
Отправить личное сообщение для maplol123@gmail.com Посмотреть профиль Найти все сообщения от maplol123@gmail.com
 
Регистрация: 30.06.2019
Сообщений: 41

Сохранение значения select option при смене radio
Как сделать так, чтоб при смене radio, сохранялось то значение в select, которое было выбрано ранее. Например, если Ширина выбрана 150 у radio с "Нет", то при выборе radio с "1 сторона", выводило в select такую же Ширину 150.
И если выбран такой radio, у которого нет одинаковых значений с другим radio, то подбиралась похожее. Например, если Ширина выбрана 170 у radio с "Нет", то при выборе radio с "1 сторона", выводило Ширину 150.
<div class="print_bag">
  <label>
    <input class="radio_g" type="radio" name="field2" value="0">
    <p>Нет</p>
  </label>
  <label>
    <input class="radio_g" type="radio" name="field2" value="1">
    <p>1 сторона</p>
  </label>
</div>
<div class="fourth_param" title="Выберите размеры для изделия">
  <div class="settings">
    <label>
      <h1>Высота, мм</h1>
      <select id="param_0">
      </select>
    </label>
    <label>
      <h1>Ширина, мм</h1>
      <select id="param_1">
      </select>
    </label>
    <label>
      <h1>Боковина, мм</h1>
      <select id="param_2">
      </select>
    </label>
    <label>
      <h1>Дно, мм</h1>
      <select id="param_3">
      </select>
    </label>
    <label>
      <h1>Длина ручки, мм</h1>
      <select id="param_4">
      </select>
    </label>
    <label>
      <h1>Плотность, г/м2</h1>
      <select id="param_5">
      </select>
    </label>
  </div>
  <hr>
</div>

jquery
let text = [
    {
      bag_print: "NONE",
      bag_height: "NONE",
      bag_width: "NONE",
      bag_sidewall: "",
      bag_bottom: "",
      bag_hangle_length: "NONE",
      bag_density: "NONE",
    },
  ];

$('input[name="field2"]').on("click", function() {
            text[0].bag_print = $(this).next("p").text();
            
            text[0].bag_print = text[0].bag_print[0].replace(/\s+/g, " ").trim();
            console.log(text[0].bag_print)
            //БЕЗ ПЕЧАТИ
            if (text[0].bag_print == "Н") {
                height = [];
                width = [];
                bottom = [];
                sidewall = [];
                hangle_length = [];
                density = [];
                for (let i = 200; i <= 580; i += 10) {
                    height.push(i);
                }
                $("#param_0").empty();
                $.each(height, function(key, value) {
                    $("#param_0").append($("<option></option>").attr("value", key).text(value));
                });
                for (let i = 100; i <= 800; i += 10) {
                    width.push(i);
                }
                $("#param_1").empty();
                $.each(width, function(key, value) {
                    $("#param_1").append($("<option></option>").attr("value", key).text(value));
                });
                $("#param_3").empty();
                $("#param_2").empty();
                $("#param_4").empty();
                for (let i = 40; i <= 120; i += 5) {
                    density.push(i);
                }
                $("#param_5").empty();
                $.each(density, function(key, value) {
                    $("#param_5").append($("<option></option>").attr("value", key).text(value));
                });
                text[0].bag_height = $("#param_0 option:selected").text();
                text[0].bag_width = $("#param_1 option:selected").text();
                text[0].bag_sidewall = "";
                text[0].bag_bottom = "";
                text[0].bag_hangle_length = "";
                text[0].bag_density = $("#param_5 option:selected").text();
            }
            //С ПЕЧАТЬЮ
            else if (text[0].bag_print == "1") {
                height = [];
                width = [
                    100,
                    150,
                    200,
                    225,
                    250,
                    300,
                    350,
                    400,
                    450,
                    500,
                    550,
                    600,
                    700,
                ];
                sidewall = [];
                bottom = [];
                hangle_length = [];
                density = [];
                for (let i = 200; i <= 580; i += 10) {
                    height.push(i);
                }
                $("#param_0").empty();
                $.each(height, function(key, value) {
                    $("#param_0").append($("<option></option>").attr("value", key).text(value));
                });
                $("#param_1").empty();
                $.each(width, function(key, value) {
                    $("#param_1").append($("<option></option>").attr("value", key).text(value));
                });
                $("#param_3").empty();
                $("#param_2").empty();
                $("#param_4").empty();
                for (let i = 40; i <= 120; i += 5) {
                    density.push(i);
                }
                $("#param_5").empty();
                $.each(density, function(key, value) {
                    $("#param_5").append($("<option></option>").attr("value", key).text(value));
                });
                text[0].bag_height = $("#param_0 option:selected").text();
                text[0].bag_width = $("#param_1 option:selected").text();
                text[0].bag_sidewall = "";
                text[0].bag_bottom = "";
                text[0].bag_hangle_length = "";
                text[0].bag_density = $("#param_5 option:selected").text();
            }
        })

Чтоб нагляднее было
https://jsfiddle.net/xgbqvp97/1/
Ответить с цитированием
  #2 (permalink)  
Старый 20.11.2020, 13:48
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от maplol123@gmail.com
Чтоб нагляднее было
И при этом не понятно что такое "нет" и что такое "1 сторона". что они определяют и т.д.
Ответить с цитированием
  #3 (permalink)  
Старый 20.11.2020, 14:19
Аспирант
Отправить личное сообщение для maplol123@gmail.com Посмотреть профиль Найти все сообщения от maplol123@gmail.com
 
Регистрация: 30.06.2019
Сообщений: 41

laimas,
Это нанесение принта на товар. "Нет" - без нанесения, тогда значения Ширины от 100 до 800 с шагом 10. "1 сторона" - нанесение принта на 1 сторону товара - Ширина другая - 100, 150, 200, 225, 250, 300, 350, 400, 450, 500, 550, 600, 700.
Как сделать так, чтоб выбранные значения параметров (высота, ширина и т.д.) в select, сохранялись при смене radio?
А отдельно для значения Ширины, если до этого был выбран radio с "Нет", и в select для Ширины выбран, например 190 мм, то при выборе radio с "1 сторона", значение Ширины в select было 200 мм, то есть приближенное к прошлому значению?
Ответить с цитированием
  #4 (permalink)  
Старый 20.11.2020, 14:31
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Когда мне дают задание, я требую ТЗ из которого я могу однозначно трактовать, связывать и т.д. данные, в общем понимать, что требуется сделать. У вас не так много их, но я прочитав так и не понял сути и что к чему.
Ответить с цитированием
  #5 (permalink)  
Старый 20.11.2020, 15:08
Аспирант
Отправить личное сообщение для maplol123@gmail.com Посмотреть профиль Найти все сообщения от maplol123@gmail.com
 
Регистрация: 30.06.2019
Сообщений: 41

laimas,
text[0].bag_print - берет текст у выбранного input type="radio" name="field2". Исходя из того, какой выбран input - создаются массивы для параметров (height, width и так далее), потом из значений этих массивов, для select создаются option.

Пользователь выбирает нужный ему input("Нет", "1 сторона"), в "Высота, мм", "Ширина, мм", добавляется выбор (option). Пользователь выбирает нужную ему "Высота, мм", "Ширина, мм" (одно из значений option). Если пользователю нужен товар с теми же "Высота, мм", "Ширина, мм" при смене input, то ему приходится заново выбирать "Высота, мм", "Ширина, мм" . Как сделать вот это сохранение уже выбранного "Высота, мм", "Ширина, мм"?

Надеюсь в этот раз попонятнее объяснил)
Ответить с цитированием
  #6 (permalink)  
Старый 20.11.2020, 15:21
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Так почему у кнопок нет метки о том, что ими выбирают? Почему нет выбора по умолчанию? А почему остальные списки "мертвые"?

Если у вас заменяется код списков, то запомнить выбор можно только в переменных. Собственно "перелопачивать" списки и не обязательно, можно скрывать/показывать нужные из списков или нужную часть списка.

PS. Если списки создаются по массивам данных, то определите для них сразу выбранные первые индексы опций, при создании списков отмечайте эти опции. При изменениях в списках заменяйте эти значения на значения выбранных опций.

Последний раз редактировалось laimas, 20.11.2020 в 15:31.
Ответить с цитированием
  #7 (permalink)  
Старый 20.11.2020, 15:47
Аспирант
Отправить личное сообщение для maplol123@gmail.com Посмотреть профиль Найти все сообщения от maplol123@gmail.com
 
Регистрация: 30.06.2019
Сообщений: 41

laimas,
Я не все сюда добавил, у меня несколько полей с кнопками и перед ними помечено, что ими выбирают)
Выбора по умолчанию нет, так как значения параметров вот этих - "Высота, мм", "Ширина, мм" и т.д. появляются исходя из того, какие кнопки были выбраны до этого.
"Мертвые" списки становятся "мертвыми", тоже смотря какие кнопки были выбраны, но да, лучше было бы их стереть для демонстрации)

Сильно варьируются данные в этих списках у меня, поэтому подумал, что будет проще обновлять списки. Но теперь нужно вот это сохранение значения или подбор приближенного значения, к выбранному до этого.
Ответить с цитированием
  #8 (permalink)  
Старый 20.11.2020, 16:10
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от maplol123@gmail.com
Выбора по умолчанию нет, так как значения параметров вот этих - "Высота, мм", "Ширина, мм" и т.д. появляются исходя из того, какие кнопки были выбраны до этого.
Ну так почему не сделать сразу "диспозицию Нет", а выбрав другое, получить другую? Радио кнопки не отмеченные проигрывают списку с опцией по умолчанию "Выберите...".

var a = 0, b = 0; //по умолчанию
//создание списков
"<option "+(array.index == a ? "selected" : "")+" value....><..."
//изменение списка
a = this.selectedIndex


где array.index текущая итерация цикла. Свяжите переменные a и b, например с именами списков, обращаясь к ним как window[this.name], или как-то иначе свяжите, вот и будет запоминание.
Ответить с цитированием
  #9 (permalink)  
Старый 20.11.2020, 16:27
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Или скорее нет, иначе бы заем иметь разные наборы списков - у списков значения разные? Тогда запоминать нужно не индексы, а значения. Но в таком случае что нужно запомнить, если выбранных значений нет в другом списке?
Ответить с цитированием
  #10 (permalink)  
Старый 20.11.2020, 16:50
Аспирант
Отправить личное сообщение для maplol123@gmail.com Посмотреть профиль Найти все сообщения от maplol123@gmail.com
 
Регистрация: 30.06.2019
Сообщений: 41

laimas,
В основном разные значения - первый список (например 20, 25, 50, 100), второй (110, 120, 130), но в некоторых списках есть приближенно одинаковые - третий список (80, 90, 100, 110), четвертый (80, 100, 120). Есть и одинаковые - пятый список (100, 200) и такой же шестой

Думаю либо начать сначала список, без запоминания значения (если похожего нет - в первом например выбрано 25, то во втором выберет 110),
либо подобрать как-то примерно похожее (в третьем выбрано 90, то во четвертом вместо 90 подбирает 100).
И если одинаковые значения присутствуют (в пятом выбрано 100, то в шестом тоже 100)

Последний раз редактировалось maplol123@gmail.com, 20.11.2020 в 16:58.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена radio на select banditman jQuery 15 08.03.2020 19:13
Выбор из option select при нажатии на кнопку на др. странице Artemyi Элементы интерфейса 9 29.09.2019 17:39
Как в oninput получить значения select? Jeick9 Events/DOM/Window 9 11.10.2014 20:18
выполнение ф-ии при изменении состояния radio MaxB Events/DOM/Window 5 24.06.2009 14:24
при выборе в 1-ом select соот.-щая инф. отображается в другом select celencer Общие вопросы Javascript 1 24.05.2009 20:38