Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Массив из значений чекбоксов,максимальное значение и сумма результата с др. значе-ями (https://javascript.ru/forum/misc/71025-massiv-iz-znachenijj-chekboksov-maksimalnoe-znachenie-i-summa-rezultata-s-dr-znache-yami.html)

Евгенион 20.10.2017 08:44

Массив из значений чекбоксов,максимальное значение и сумма результата с др. значе-ями
 
Добрый день. Прошу уважаемых гуру помочь разобраться с задачей, понимание которой есть а знаний для реализации крепко не хватает.
Суть задачи: имеем ряд чекбоксов, при их активции значения должны суммироваться по следующей логике:
- при выборе одного чекбокса с наибольшим значением должно выводиться только максимальное значение это чекбокса, при нажатии на остальные значение не меняется, то есть выводится в результат максимальное из всех
При этом есть чекбоксы значения которых должны суммироваться с максимальным значением из выбранных чекбоксов они отмечены жирным.

Например - выбрали смену наименования(10000) и смену руководителя(10000) то сумма должна выйти в 10000 руб.

Выбрали Смена паспортных данных учредителя(5000) и Выход учредителя или распределение его доли в ООО(8000) сумма должна выйти в 8000 руб.

Исключение составляет только а)продажи доли и Исправление ошибки(10000), если выбирают их то сумма суммируется. например выбрали смену наименования и продажи доли, то сумма 20000 руб.

Выбрали Исправление ошибки(10000) и Продажа доли в ООО (смена учредителя)(10000) то результат 20000, при этом если выбирать любые другие чекбоксы к этой сумме должен прибавляться результат максимального значения массива то есть если выбрать еще и Выход учредителя или распределение его доли в ООО(8000) то сумма 28000 и если еще к ним выбрать Смена паспортных данных учредителя(5000) то сумма все равно 28000.

Начал делать но не понимаю как это связать воедино чтобы работало.
Буду крайне признателен всем кто поможет.:help:


<---------html_______>

<div id="price">
<ul>
<li><input type="checkbox" name="regcalc" value="10000" />Смена наименования</li>
<li><input type="checkbox" name="regcalc" value="10000" />Смена юридического адреса</li>
<li><input type="checkbox" name="regcalc" value="10000" />Смена видов деятельности</li>
<li><input type="checkbox" name="regcalc" value="10000" />Увеличение уставного капитала или вход участника путем увеличения уставного капитала в ООО</li>
<li><input type="checkbox" name="regcalc" value="10000" />Другие изменения в устав</li>
<li><input type="checkbox" name="regcalc" value="10000" />Изменения в ЕГРЮЛ ООО, АО</li>
<li><input type="checkbox" name="regcalc" value="1000" />Смена юридического адреса</li>
<li><input type="checkbox" name="regcalc" value="5000" />Смена руководителя или его паспортных данных</li>
<li><input type="checkbox" name="regcalc" value="8000" />Выход учредителя или распределение его доли в ООО</li>
<li><input type="checkbox" name="regcalc" value="10000" />Продажа доли в ООО (смена учредителя)</li>
<li><input type="checkbox" name="regcalc" value="5000" />Смена паспортных данных учредителя</li>
<li><input type="checkbox" name="regcalc" value="5000" />Смена видов деятельности</li>
<li><input type="checkbox" name="regcalc" value="10000" />Исправление ошибки</li>
<li><input type="checkbox" name="regcalc" value="5000" />Внесение записи о реестродержателе АО</li>
</ul>

<div class="result" id="sum">0</div>
</div>
<---------html_______>



<------------------------------javascript------------------------->


Array.prototype.map.call(document.querySelectorAll ('checkbox'),function(element,index,arr){

element.addEventListener('change',function(){
var _value = this.value;
Array.prototype.map.call(arr,function(e,i,a){
a[i].value = _value;
})

},false)

})

Array.prototype.max = function(){
var max = parseInt(this[this.length-1]), el;
for(var i=this.length-2; i>=0; i--){
el = parseInt(this[i]);
if(el>max){
max = el;
}
}
return max;
};

<script language="JavaScript" type="text/javascript">
$(function(){
$("#price").click(function(){
var sum=0; // начальное значение можно указать любое
$('#price :checked').each(function(){
sum+=parseInt($(this).val());
});
$('#sum').text(sum);
});
});
</script>

<------------------------------javascript------------------------->

ksa 20.10.2017 09:20

Как вариант...

<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<script src='https://code.jquery.com/jquery-latest.js'></script>
<!--
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
$(function(){
	$('#price > ul').click(function(e){
		if (e.target.tagName!='INPUT') return;
		var sum=0;
		var max=0;
		$('#price :checkbox:checked:not(.summ)').each(function(){
			var val=+this.value;
			if (val>max) max=val;
		});
		$('#price .summ:checked').each(function(){
			sum+=+this.value;
		});
		$('#price > .result').text(sum+max);
	});
});
</script>
</head>
<body>
<div id="price">
	<ul>
		<li><input type="checkbox" name="regcalc" value="10000" />Смена наименования</li>
		<li><input type="checkbox" name="regcalc" value="10000" />Смена юридического адреса</li>
		<li><input type="checkbox" name="regcalc" value="10000" />Смена видов деятельности</li>
		<li><input type="checkbox" name="regcalc" value="10000" />Увеличение уставного капитала или вход участника путем увеличения уставного капитала в ООО</li>
		<li><input type="checkbox" name="regcalc" value="10000" />Другие изменения в устав</li>
		<li><input type="checkbox" name="regcalc" value="10000" />Изменения в ЕГРЮЛ ООО, АО</li>
		<li><input type="checkbox" name="regcalc" value="1000" />Смена юридического адреса</li>
		<li><input type="checkbox" name="regcalc" value="5000" />Смена руководителя или его паспортных данных</li>
		<li><input type="checkbox" name="regcalc" value="8000" />Выход учредителя или распределение его доли в ООО</li>
		<li><input type="checkbox" name="regcalc" value="10000" class='summ' />Продажа доли в ООО (смена учредителя)</li>
		<li><input type="checkbox" name="regcalc" value="5000" />Смена паспортных данных учредителя</li>
		<li><input type="checkbox" name="regcalc" value="5000" />Смена видов деятельности</li>
		<li><input type="checkbox" name="regcalc" value="10000" class='summ' />Исправление ошибки</li>
		<li><input type="checkbox" name="regcalc" value="5000" />Внесение записи о реестродержателе АО</li>
	</ul>
	<div class="result" id="sum">0</div>
</div>
</body>
</html>

рони 20.10.2017 09:29

Цитата:

Сообщение от ksa
if (e.target.tagName!='INPUT') return;

на всякий случай
$('#price > ul').on('click', 'input',function(e){
    var sum=0;

ksa 20.10.2017 09:41

Цитата:

Сообщение от рони
на всякий случай

Ок. :yes:

Евгенион 20.10.2017 21:36

Простите пожалуйста, то что Вы написали не помогло решить задачу, я понимаю что она слишком сложная и все же прощу сообщество уделить немного своего драгоценного времемени.
Я не силен в синтаксисе не умею писать код просто составляю его как конструктор, хотелось бы получать из значений активированных чекбоксов массив, что бы в нем выбиралось максимальное значение и суммировалось с другими значениями других активированных чекбоксов. Куски кода как сформировать массив, вычислить максимальное значение и калькулятор я нашел, а как связать воедино, извините, ни в зуб ногой.

Евгенион 23.10.2017 07:44

Спасибо большое, все супер! Очень помогли


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