Home > Enterprise >  how to write JavaScript function for 3 selection option value, and get sum on click button
how to write JavaScript function for 3 selection option value, and get sum on click button

Time:12-26

I have write 3 selection box which, myFunction() myFunction2() and myFunction3. but only myfuntion() can run. not for other. this 3 selection list have the same values. i also change the variable in function but its not working for me. I really appreciate anyone who can helps me. I am new to JavaScript, any help would be grateful. Thank you.

 <tr id="">
<th><select id="selection2" onchange="myFunction2()">
                <option id="0" value="0">None</option>
                <option id="1" value="4.00">Women Suit</option>
                <option id="2" value="10.00">Dress</option>
                <option id="3" value="6.00">Regular Skirt</option>
                <option id="4" value="7.00">Skirt With Hook</option>
                <option id="5" value="8.00">Men's Suit 2Pc</option>
                <option id="6" value="9.00">Men's Suit 3Pc</option>
                <option id="7" value="15.00">Sweaters</option>
                <option id="8" value="25.00">Silk Shirt</option>
                <option id="9" value="12.00">Tie</option>
                <option id="10" value="13.00">Coat</option>
                <option id="11" value="14.00">Jacket</option>
                <option id="12" value="15.00">Swede</option>
              </select></th>
            <td>
              <div>
                <input type="text" name="price" id="priceitem2">
              </div>
            </td>
            <td>
              <div><input type="number" name="qtyItem2" id="qtyItem2" size="20" /></div>
            <td>
              <div><input type="button" value="Calc" onclick="processItem2()"></div>
            </td>
            </td>
            <td>
              <div><input type="text" name="sumItem2" id="sumItem2"></div>
            </td>
          </tr>
let option;
    function myFunction() {
      let selection = document.getElementById("selection");
      option = selection.options[selection.selectedIndex].value;
      document.getElementById("priceitem1").value = option;
    }
    function processItem1() {
      let quantity = Number(document.getElementById("qtyItem1").value);
      let sum = quantity * Number(option);
      document.getElementById("sumItem1").value = sum;
    }
    
    let option;
    function myFunction2() {
      let selection2 = document.getElementById("selection2");
      option = selection2.options[selection2.selectedIndex].value;
      document.getElementById("priceitem2").value = option;
    }
    function processItem2() {
      let quantity = Number(document.getElementById("qtyItem2").value);
      let sum = quantity * Number(option);
      document.getElementById("sumItem2").value = sum;
    }
    
    let option;
    function myFunction3() {
      let selection3 = document.getElementById("selection3");
      option = selection2.options[selection2.selectedIndex].value;
      document.getElementById("priceitem3").value = option;
    }
    function processItem2() {
      let quantity = Number(document.getElementById("qtyItem3").value);
      let sum = quantity * Number(option);
      document.getElementById("sumItem3").value = sum;
    }

CodePudding user response:

Actually your code is work fine. but like @Layhout said you declare too many option, and you just have to use one MyFunction and processItem1. see the code below.

let option;
    function myFunction() {
      let selection = document.getElementById("selection");
      option = selection.options[selection.selectedIndex].value;
      document.getElementById("priceitem1").value = option;
    }
    function processItem1() {
      let quantity = Number(document.getElementById("qtyItem1").value);
      let sum = quantity * Number(option);
      document.getElementById("sumItem1").value = sum;
    }
    
    function myFunction2() {
      let selection2 = document.getElementById("selection2");
      option = selection2.options[selection2.selectedIndex].value;
      document.getElementById("priceitem2").value = option;
    }
    function processItem2() {
      let quantity2 = Number(document.getElementById("qtyItem2").value);
      let sum2 = quantity2 * Number(option);
      document.getElementById("sumItem2").value = sum2;
    }
<select id="selection" onchange="myFunction()">
  <option id="0" value="0">None</option>
  <option id="1" value="4.00">Women Suit</option>
  <option id="2" value="10.00">Dress</option>
  <option id="3" value="6.00">Regular Skirt</option>
</select><br>

<input type="text" name="price" id="priceitem1"><br>
<input type="number" name="qtyItem2" id="qtyItem1" size="20" /><br>
<input type="button" value="Calc" onclick="processItem1()"><br>
<input type="text" name="sumItem1" id="sumItem1"></div>

<br>//////////////////////////////////////////////////////<br>

<select id="selection2" onchange="myFunction2()">
  <option id="0" value="0">None</option>
  <option id="1" value="4.00">Women Suit</option>
  <option id="2" value="10.00">Dress</option>
  <option id="3" value="6.00">Regular Skirt</option>
</select><br>

<input type="text" name="price" id="priceitem2"><br>
<input type="number" name="qtyItem2" id="qtyItem2" size="20" /><br>
<input type="button" value="Calc" onclick="processItem2()"><br>
<input type="text" name="sumItem2" id="sumItem2"></div>

I hope this can help answer your question.

Edited: if u want the 3rd one, just do the same thing and make the different name or id

CodePudding user response:

You should avoid working with ids. This will make everything more scalable as you can see below. I am using a single function that addresses the concerned DOM elements in a relative way:

const inps=document.querySelectorAll("select, input");
function action(ev){
 const [typ,prc,qty,sum]= ev.target.closest("tr").querySelectorAll(".typ,.prc,.qty,.sum");
 prc.value=typ.value;
sum.value=prc.value*qty.value??0;
}
["input","change"].forEach(ev=>inps.forEach(el=>el.addEventListener(ev,action)))
input {width:50px}
<table>
<tr>
<th><select  name="sel1">
            <option id="0" value="0">None</option>
            <option id="1" value="4.00">Women Suit</option>
            <option id="2" value="10.00">Dress</option>
            <option id="3" value="6.00">Regular Skirt</option>
            <option id="4" value="7.00">Skirt With Hook</option>
            <option id="5" value="8.00">Men's Suit 2Pc</option>
            <option id="6" value="9.00">Men's Suit 3Pc</option>
            <option id="7" value="15.00">Sweaters</option>
            <option id="8" value="25.00">Silk Shirt</option>
            <option id="9" value="12.00">Tie</option>
            <option id="10" value="13.00">Coat</option>
            <option id="11" value="14.00">Jacket</option>
            <option id="12" value="15.00">Swede</option>
          </select></th>
        <td>
          <div>
            <input type="text" name="price1" >
          </div>
        </td>
        <td>
          <div><input type="number" name="qtyItem1" size="20" /></div>
        <td>
          <div><input type="button"></div>
        </td>
        </td>
        <td>
          <div><input type="text" name="sum1" ></div>
        </td>
      </tr>
<tr>
<th><select  name="sel2">
            <option id="0" value="0">None</option>
            <option id="1" value="4.00">Women Suit</option>
            <option id="2" value="10.00">Dress</option>
            <option id="3" value="6.00">Regular Skirt</option>
            <option id="4" value="7.00">Skirt With Hook</option>
            <option id="5" value="8.00">Men's Suit 2Pc</option>
            <option id="6" value="9.00">Men's Suit 3Pc</option>
            <option id="7" value="15.00">Sweaters</option>
            <option id="8" value="25.00">Silk Shirt</option>
            <option id="9" value="12.00">Tie</option>
            <option id="10" value="13.00">Coat</option>
            <option id="11" value="14.00">Jacket</option>
            <option id="12" value="15.00">Swede</option>
          </select></th>
        <td>
          <div>
            <input type="text" name="price2" >
          </div>
        </td>
        <td>
          <div><input type="number" name="qty2" size="20" /></div>
        <td>
          <div><input type="button"></div>
        </td>
        </td>
        <td>
          <div><input type="text" name="sum2" ></div>
        </td>
      </tr>
</table>

CodePudding user response:

    <script>
            function calculateSum(){
                var select1 = document.myForm.mySelect1.value;
                var select2 = document.myForm.mySelect2.value;
                var select3 = document.myForm.mySelect3.value;
                var sum = parseInt(select1)   parseInt(select2)   parseInt(select3);
                alert("Sum of three numbers is: "   sum);
            }
        </script>
<html>
    <head>
        <title>JavaScript Sum</title>
    </head>
    <body>
        <form name="myForm">
            <select name="mySelect1">
                <option value="0">0</option>
                <option value="1">1</option>
                <option value="2">2</option>
            </select>
            <select name="mySelect2">
                <option value="3">3</option>
                <option value="4">4</option>
                <option value="5">5</option>
            </select>
            <select name="mySelect3">
                <option value="6">6</option>
                <option value="7">7</option>
                <option value="8">8</option>
            </select>
            <input type="button" value="Calculate Sum" onclick="calculateSum()">
        </form>
        
    </body>
</html>

  • Related