20.11.2020, 11:21
|
Аспирант
|
|
Регистрация: 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/
|
|
20.11.2020, 13:48
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от maplol123@gmail.com
|
Чтоб нагляднее было
|
И при этом не понятно что такое "нет" и что такое "1 сторона". что они определяют и т.д.
|
|
20.11.2020, 14:19
|
Аспирант
|
|
Регистрация: 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 мм, то есть приближенное к прошлому значению?
|
|
20.11.2020, 14:31
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Когда мне дают задание, я требую ТЗ из которого я могу однозначно трактовать, связывать и т.д. данные, в общем понимать, что требуется сделать. У вас не так много их, но я прочитав так и не понял сути и что к чему.
|
|
20.11.2020, 15:08
|
Аспирант
|
|
Регистрация: 30.06.2019
Сообщений: 41
|
|
laimas,
text[0].bag_print - берет текст у выбранного input type="radio" name="field2". Исходя из того, какой выбран input - создаются массивы для параметров (height, width и так далее), потом из значений этих массивов, для select создаются option.
Пользователь выбирает нужный ему input("Нет", "1 сторона"), в "Высота, мм", "Ширина, мм", добавляется выбор (option). Пользователь выбирает нужную ему "Высота, мм", "Ширина, мм" (одно из значений option). Если пользователю нужен товар с теми же "Высота, мм", "Ширина, мм" при смене input, то ему приходится заново выбирать "Высота, мм", "Ширина, мм" . Как сделать вот это сохранение уже выбранного "Высота, мм", "Ширина, мм"?
Надеюсь в этот раз попонятнее объяснил)
|
|
20.11.2020, 15:21
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Так почему у кнопок нет метки о том, что ими выбирают? Почему нет выбора по умолчанию? А почему остальные списки "мертвые"?
Если у вас заменяется код списков, то запомнить выбор можно только в переменных. Собственно "перелопачивать" списки и не обязательно, можно скрывать/показывать нужные из списков или нужную часть списка.
PS. Если списки создаются по массивам данных, то определите для них сразу выбранные первые индексы опций, при создании списков отмечайте эти опции. При изменениях в списках заменяйте эти значения на значения выбранных опций.
Последний раз редактировалось laimas, 20.11.2020 в 15:31.
|
|
20.11.2020, 15:47
|
Аспирант
|
|
Регистрация: 30.06.2019
Сообщений: 41
|
|
laimas,
Я не все сюда добавил, у меня несколько полей с кнопками и перед ними помечено, что ими выбирают)
Выбора по умолчанию нет, так как значения параметров вот этих - "Высота, мм", "Ширина, мм" и т.д. появляются исходя из того, какие кнопки были выбраны до этого.
"Мертвые" списки становятся "мертвыми", тоже смотря какие кнопки были выбраны, но да, лучше было бы их стереть для демонстрации)
Сильно варьируются данные в этих списках у меня, поэтому подумал, что будет проще обновлять списки. Но теперь нужно вот это сохранение значения или подбор приближенного значения, к выбранному до этого.
|
|
20.11.2020, 16:10
|
Профессор
|
|
Регистрация: 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], или как-то иначе свяжите, вот и будет запоминание.
|
|
20.11.2020, 16:27
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Или скорее нет, иначе бы заем иметь разные наборы списков - у списков значения разные? Тогда запоминать нужно не индексы, а значения. Но в таком случае что нужно запомнить, если выбранных значений нет в другом списке?
|
|
20.11.2020, 16:50
|
Аспирант
|
|
Регистрация: 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.
|
|
|
|