JSFiddle - React, Tailwind, and code Playground

by Marco

HTML

<form id="itemlist" method="post" enctype="multipart/form-data" >

  
    <!--<input type="hidden" id="ranges" name="ranges" value="1-3" />-->
    
    <input type="hidden" id="ranges" name="ranges" value="1-3" />
    <input type="text" placeholder="Item" id="R1_A_1" name="A_1" size="20" class="form_item" value="HDD Baracuda Black 2TB" />
    <span id="R1_min_1" class="plusminus">-</span>
    <input type="text" placeholder="Qty" id="R1_B_1" name="B_1" value="0" size="2" class="form_qty" />
    <span id="R1_plus_1" class="plusminus" >+</span>
    <input type="text" placeholder="Price" id="R1_C_1" name="C_1" size="5" class="form_price" value="10" />
    <input type="text" placeholder="Disc." id="R1_D_1" name="D_1" size="3" class="form_discount" />
    <input type="text" placeholder="Sum" id="R1_E_1" name="E_1" size="6" class="form_sum" value="0"/>
    <br />
    
    <input type="text" placeholder="Item" id="R1_A_2" name="A_2" size="20" class="form_item" value="Motherboard ASus XYZ" />
    <span id="R1_min_2" class="plusminus">-</span>
    <input type="text" placeholder="Qty" id="R1_B_2" name="B_2" value="0" size="2" class="form_qty" />
    <span id="R1_plus_2" class="plusminus" >+</span>
    <input type="text" placeholder="Price" id="R1_C_2" name="C_2" size="5" class="form_price" value="46" />
    <input type="text" placeholder="Disc." id="R1_D_2" name="D_2" size="3" class="form_discount" />
    <input type="text" placeholder="Sum" id="R1_E_2" name="E_2" size="6" class="form_sum" value="0"/>
    <br />
    
    <input type="text" placeholder="Item" id="R1_A_3" name="A_3" size="20" class="form_item" value="Memory Kingston DDR3 4GB" />
    <span id="R1_min_3" class="plusminus">-</span>
    <input type="text" placeholder="Qty" id="R1_B_3" name="B_3" value="0" size="2" class="form_qty" />
    <span id="R1_plus_3" class="plusminus" >+</span>
    <input type="text" placeholder="Price" id="R1_C_3" name="C_3" size="5" class="form_price" value="18" />
    <input...

CSS

.plusminus {
    font-weight: bold;
    font-family: monospace;
    font-size: 1.3em;
    border: 1px green solid;
    padding: 0px 5px;
  }

JavaScript

function calculateTot(idx){
		 var totSum=0
		 var collection = $('form').find('[id^="'+idx+'"]').filter(function(index){
			  return this.id.search(/\d$/) != -1&&this.className==='form_sum';
		  });
		 for(i=0;i<collection.length;i++)
			 if (!isNaN(parseFloat(collection.get(i).value))){totSum+=parseFloat(collection.get(i).value)}
		  $('#'+idx+'_total').val(totSum)	 
	}
	function calculateScount(element){
		var idx=element.attr('id').slice(0,-4)
		var ind=element.index()
		var formPrice=parseFloat($('form').find(':nth-child('+(ind)+')').val())
		var formQty=parseFloat($('form').find(':nth-child('+(ind-2)+')').val())
		var thisVal=parseFloat(element.val())
		var scount=(formPrice*formQty)/100*thisVal
		$('form').find(':nth-child('+(ind+2)+')').val((formPrice*formQty-scount).toFixed(2))
		calculateTot(idx) 
     }
	 function calculate(nuber,qty,idx,a,b,c){
		 var formQty=nuber+a
		 var rowTot=nuber+b
		 var scount=nuber+c
		 var scontValue=$('form').find(':nth-child('+scount+')').val()
		 var element=$('form').find(':nth-child('+scount+')')
		 if(scontValue===''){
			 var tot=parseFloat($('form').find(':nth-child('+rowTot+')').val())
			 $('form').find(':nth-child('+formQty+')').val((tot*qty).toFixed(2))
			 calculateTot(idx) 
		 }else{calculateScount(element)}
	  }
      $('.plusminus').click(function(){
		var val=$(this).text()
		var ind=$(this).index()
		if(val==='+'){
			var idx=$(this).attr('id').slice(0,-7)
			var qty=parseInt($(this).prev().val())
			qty++
			$(this).prev().val(qty)
			calculate(ind,qty,idx,4,2,3)
		}
		if(val==='-'&&parseInt($(this).next().val())>=1){
			var idx=$(this).attr('id').slice(0,-6)
			var qty=parseInt($(this).next().val())
			qty--
			$(this).next().val(qty)
			calculate(ind,qty,idx,6,4,5)
		}
       });
	    $('input.form_qty').on('change',function(){
			var ind=$(this).index()
			var qty=parseInt($(this).val())
			var idx=$(this).attr('id').slice(0,-4)
			calculate(ind,qty,idx,5,3,4)...