|
Дублировать значение select s span
Здравствуйте есть форма:
Агрегат <select name='sel1'> <option value='480'>Вал тип 1</option> <option value='556'>Вал тип 2</option> </select><br> Цена: <span id="sel1">0</span> руб Центральная смазка <select name='sel2'> <option value='0'>Нет</option> <option value='23'>Да</option> </select><br> Цена: <span id="sel2">0</span> руб Двойной подшипник <select name='sel3'> <option value='0'>Нет</option> <option value='22'>Да</option> </select><br> Цена: <span id="sel3">0</span> руб Общая стоимость выбранных позиций: <span id="sum">0</span> руб И обработчик:
<script type="text/javascript">
$(document).ready(function(){ $("select[name^='sel']").trigger('change'); }); //Установить цену при загрузке страницы
$("select[name^='sel']").change(function() {
var s = $('select[name^="sel"] option:selected').map(function() {
$("#sel1").innerHTML = s;
return this.value
}).get()
var sum = s.reduce((pv, cv) => {
return pv + (parseFloat(cv) || 0);
}, 0);
$("#sum").text(sum.toLocaleString()); //Разделить разряды
})
</script>
Обработчик считает сумму выбранных опций и передает все это в переменную sum, это работает, но как выводить цену при изменении Select'a??? При изменении select sel1, возле него у span id должна измениться цена: <span id="sel1">0</span> руб. (цена равна value селекта). Таких селектов может быть до 15 штук Вопрос для тех кто в знает ламерский, но очень прошу помочь |
kk450,
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
var sel = $("select[name^='sel']")
sel.change(function() {
var sum = 0;
sel.each(function(i, el) {
var num = +this.value||0, id = "#"+this.name;
sum += num;
$(id).text(num)
});
$("#sum").text(sum);
}).trigger('change')
});
</script>
</head>
<body>
Агрегат
<select name='sel1'>
<option value='480'>Вал тип 1</option>
<option value='556'>Вал тип 2</option>
</select><br>
Цена: <span id="sel1">0</span> руб
<br>
Центральная смазка
<select name='sel2'>
<option value='0'>Нет</option>
<option value='23'>Да</option>
</select><br>
Цена: <span id="sel2">0</span> руб
<br>
Двойной подшипник
<select name='sel3'>
<option value='0'>Нет</option>
<option value='22'>Да</option>
</select><br>
Цена: <span id="sel3">0</span> руб
<br>
Общая стоимость выбранных позиций: <span id="sum">0</span> руб
</body>
</html>
|
<script type="text/javascript">
$(document).ready(function(){ $("select[name^='sel']").trigger('change'); }); //Установить цену при загрузке страницы
$("select[name^='sel']").change(function() {
var s = $('select[name^="sel"] option:selected').map(function() {
return this.value;
}).get()
var sum = s.reduce((pv, cv) => {
return pv + (parseFloat(cv) || 0);
}, 0);
$("span").each(function(i){
this.textContent = s[i];
});
$("#sum").text(sum.toLocaleString()); //Разделить разряды
});
|
Агрегат
<select name='sel1'>
<option value='480'>Вал тип 1</option>
<option value='556'>Вал тип 2</option>
</select><br>
Цена: <span id="sel1">0</span> руб <br>
Центральная смазка
<select name='sel2'>
<option value='0'>Нет</option>
<option value='23'>Да</option>
</select><br>
Цена: <span id="sel2">0</span> руб <br>
Двойной подшипник
<select name='sel3'>
<option value='0'>Нет</option>
<option value='22'>Да</option>
</select><br>
Цена: <span id="sel3">0</span> руб <br>
Общая стоимость выбранных позиций: <span id="sum">0</span> руб
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){ $("select[name^='sel']").trigger('change'); }); //Установить цену при загрузке страницы
$("select[name^='sel']").change(function() {
$("#"+ this.name).html((+this.value).toFixed(2));
var s = $('select[name^="sel"] option:selected').map(function() {
return this.value
}).get()
var sum = s.reduce((pv, cv) => {
return pv + (parseFloat(cv) || 0);
}, 0);
$("#sum").text(sum.toFixed(2)); //Разделить разряды
})
</script>
|
Спасибо большое!!! Очень выручили
Остановился на варианте Dilettante_Pro Еще есть вопрос как к новой цене применить функцию разделения на разряды? такой вариант не работает?
$("#"+ this.name).html(this.value.toLocaleString()); //Разделить разряды);
|
kk450,
toLocaleString -метод для форматирования дат. Для выделения дробной части можно использовать toFixed. Про разбивку по разрядам поищите на форуме - было. |
Dilettante_Pro,
Да находил много разных способов поищу еще, а как правильно вставить отформатированную строку в данном случае? Всмысле в вашем способе добавить .toLocaleString строке, потом найду более подходящий способ разбить на разряды (в моем случае дробей не будет, но спасибо за наводку) |
Цитата:
<span id="sel1">0</span> руб <br> <script> var value = 556; sel1.innerText = value.toFixed(2); </script> PS: изменил пример |
Перечитал вопрос еще раз - похоже, неправильно понял. При разбивке на разряды число преобразуется в строку, которая потом и выводится в html
Разбить число на разряды <span id="sel1">0</span> руб <br> <script> var value = 3830000, str = value.toString(); str = str.replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 '); sel1.innerText = str; </script> |
|
| Часовой пояс GMT +3, время: 05:32. |
|