【问题标题】:sum of price-data according to the selection from multi select dropdown根据从多选下拉列表中选择的价格数据总和
【发布时间】:2023-03-08 16:55:01
【问题描述】:

根据选择,我希望在总输入框中显示数据价格的总和

 <HTML>
   <body>
<form name="myForm" action="insert.php" onsubmit="return validateForm()" method="post" id="myForm" style="width=90%" enctype="multipart/form-data" required>
<label>Test Name:</label>
     <select id="framework" name="framework[]" multiple class="form-control" >
<option value="HDL Cholesterol" data-price="180">HDL Cholesterol</option>
<option value="Total Cholesterol" data-price=180180180>Total Cholesterol</option>
<option value="Triglycerides (TG)" data-price=180285180>Triglycerides (TG)</option>
<option value="Sugar (Glucose) Fasting (FBS)" data-price=28570285>Sugar (Glucose) Fasting (FBS)</option>
<option value="Sugar (Glucose) Post Prandial (PPBS)" data-price=707070>Sugar (Glucose) Post Prandial (PPBS)</option>
<option value="Sugar (Glucose) Random (RBS)" data-price=707070>Sugar (Glucose) Random (RBS)</option>
<option value="Reticulocyte Count" data-price=7055070>Reticulocyte Count</option>
<option value="Total Thyroxine (T4)" data-price=550198550>Total Thyroxine (T4)</option>
<option value="Total Triiodothyronine (T3)" data-price=198198198>Total Triiodothyronine (T3)</option>
<option value="TSH (Thyroid Stimulating Hormone)" data-price=198240198>TSH (Thyroid Stimulating Hormone)</option>
<option value="Alkaline Phosphatase (ALP)" data-price=240210240>Alkaline Phosphatase (ALP)</option>
<option value="Aspartate Aminotransferase (SGOT )" data-price=210190210>Aspartate Aminotransferase (SGOT )</option>
<option value="Bilirubin Total" data-price=190130190>Bilirubin Total</option>
<option value="Calcium" data-price=130176130>Calcium</option>
<option value="Iron" data-price=176380176>Iron</option>
</select>
<td><label>Total Amount:</label><input type="number" name="totalamount">
</body>
</html>

【问题讨论】:

    标签: javascript php mysql drop-down-menu


    【解决方案1】:

    两种口味的解决方案。当然,reduce 可以用于任何一种方法,但在 jQuery 方式中,我尝试坚持使用 jQuery 方法。

    VanillaJS

    您可以使用 array.reduce() 函数来计算它,因为它正在使用 change 事件侦听器进行更改。将变量保持为全局变量,以便您可以在其他地方引用它(例如在 form.submit 中)。

    这一行,解释:

    totalVal = [...e.target.querySelectorAll('option:checked')] // get the HTML collection of selected option elements and convert that into an iterable array using the  [...] spread syntax
                .reduce((b, a) => // b is the accumulating value, a is the current iterating element
                    (b + +a.dataset.price) // convert the price data-attribute to a number using the shorthand +
                 , 0); // b starts out as zero and we add to it
    

    let totalVal = 0;
    window.addEventListener('load', () => {
      document.querySelector('#framework').addEventListener('change', e => {
        totalVal = [...e.target.querySelectorAll('option:checked')].reduce((b, a) => (b + +a.dataset.price), 0);
        document.querySelector('[name=totalamount]').value = totalVal
      })
    })
    <form name="myForm" action="insert.php" onsubmit="return validateForm()" method="post" id="myForm" style="width=90%" enctype="multipart/form-data" required>
      <label>Test Name:</label>
      <select id="framework" name="framework[]" multiple class="form-control">
        <option value="HDL Cholesterol" data-id="1" data-price="180">HDL Cholesterol</option>
        <option value="Total Cholesterol" data-id="2" data-price="180180180">Total Cholesterol</option>
        <option value="Triglycerides (TG)" data-id="3" data-price="180285180">Triglycerides (TG)</option>
        <option value="Sugar (Glucose) Fasting (FBS)" data-id="4" data-price="28570285">Sugar (Glucose) Fasting (FBS)</option>
        <option value="Sugar (Glucose) Post Prandial (PPBS)" data-id="5" data-price="707070">Sugar (Glucose) Post Prandial (PPBS)</option>
        <option value="Sugar (Glucose) Random (RBS)" data-id="6" data-price="707070">Sugar (Glucose) Random (RBS)</option>
        <option value="Reticulocyte Count" data-id="7" data-price="7055070">Reticulocyte Count</option>
        <option value="Total Thyroxine (T4)" data-id="8" data-price="550198550">Total Thyroxine (T4)</option>
        <option value="Total Triiodothyronine (T3)" data-id="9" data-price="198198198">Total Triiodothyronine (T3)</option>
        <option value="TSH (Thyroid Stimulating Hormone)" data-id="10" data-price="198240198">TSH (Thyroid Stimulating Hormone)</option>
        <option value="Alkaline Phosphatase (ALP)" data-id="11" data-price="240210240">Alkaline Phosphatase (ALP)</option>
        <option value="Aspartate Aminotransferase (SGOT )" data-id="12" data-price="210190210">Aspartate Aminotransferase (SGOT )</option>
        <option value="Bilirubin Total" data-id="13" data-price="190130190">Bilirubin Total</option>
        <option value="Calcium" data-id="14" data-price="130176130">Calcium</option>
        <option value="Iron" data-id="15" data-price="176380176">Iron</option>
      </select>
      <hr>
      <label>Total Amount:</label><input type="number" name="totalamount">
    </form>

    jQuery 方式

    let total = 0;
    let code = [];
    $('#framework').on('change', function() {
      total = 0;
      code = [];
      $(this).find('option:selected').each(function() {
        total += +$(this).data('price');
        code.push($(this).data('id'));
      })
      $('#totalamount').val(total);
      $('#testcode').val(code.join(", "));
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <form name="myForm" action="insert.php" onsubmit="return validateForm()" method="post" id="myForm" style="width=90%" enctype="multipart/form-data" required>
      <label>Test Name:</label>
      <select id="framework" name="framework[]" multiple class="form-control">
        <option value="HDL Cholesterol" data-id="1" data-price="180">HDL Cholesterol</option>
        <option value="Total Cholesterol" data-id="2" data-price="180180180">Total Cholesterol</option>
        <option value="Triglycerides (TG)" data-id="3" data-price="180285180">Triglycerides (TG)</option>
        <option value="Sugar (Glucose) Fasting (FBS)" data-id="4" data-price="28570285">Sugar (Glucose) Fasting (FBS)</option>
        <option value="Sugar (Glucose) Post Prandial (PPBS)" data-id="5" data-price="707070">Sugar (Glucose) Post Prandial (PPBS)</option>
        <option value="Sugar (Glucose) Random (RBS)" data-id="6" data-price="707070">Sugar (Glucose) Random (RBS)</option>
        <option value="Reticulocyte Count" data-id="7" data-price="7055070">Reticulocyte Count</option>
        <option value="Total Thyroxine (T4)" data-id="8" data-price="550198550">Total Thyroxine (T4)</option>
        <option value="Total Triiodothyronine (T3)" data-id="9" data-price="198198198">Total Triiodothyronine (T3)</option>
        <option value="TSH (Thyroid Stimulating Hormone)" data-id="10" data-price="198240198">TSH (Thyroid Stimulating Hormone)</option>
        <option value="Alkaline Phosphatase (ALP)" data-id="11" data-price="240210240">Alkaline Phosphatase (ALP)</option>
        <option value="Aspartate Aminotransferase (SGOT )" data-id="12" data-price="210190210">Aspartate Aminotransferase (SGOT )</option>
        <option value="Bilirubin Total" data-id="13" data-price="190130190">Bilirubin Total</option>
        <option value="Calcium" data-id="14" data-price="130176130">Calcium</option>
        <option value="Iron" data-id="15" data-price="176380176">Iron</option>
      </select>
      <hr>
      <label>Test Code:</label><input type="text" id="testcode" name="testcode">
    
      <label>Total Amount:</label><input type="number" id="totalamount" name="totalamount">
    
    </form>

    【讨论】:

    • 你能帮我完成以下功能吗
    • 是的,请查看我更新的答案。他们将值加在一起的方式是有问题的。最好每次都添加它们而不是增量。如果这有助于解决您的问题,请单击答案左侧的复选标记作为答案。干杯
    【解决方案2】:

    我正在使用下面的功能,你可以请他

    on deselecting dropdown option, value remains with no changes
    function is to get comma separated testcode to testcode inputbox and totalamount to totalamoun text box 
            <html>`enter code here`
        <body>
              // query to fetch data from database
            $data="";
            $query = "SELECT testcode,testname,mrp FROM pricelist";
            $resultSet = mysqli_query($conn, $query);
            if ($resultSet)
            {
              while($row = mysqli_fetch_array($resultSet)) {
                $data .="<option value='".$row['testname']."' data-price='".$row['mrp']."' data-id='".$row['testcode']."'>".$row['testname']."</option>";
              }
            }
            //form 
            <div class="form-group1">
            <label>Test Name:</label>
                 <select id="framework" name="framework[]" multiple class="form-control" >
                      <?php echo $data; ?>
                 </select>
                </div>
              </td>    
              <td><label>Test Code:</label><input type="text" id="testcode" name="testcode"></td>    
            <tr class="line_items">    
              <td><label>Total Amount:</label><input type="number" id="totalamount" name="totalamount">
            //jquery function
            <script>
            var total=0;
            var code="";
            $('#framework').on('change', function(){
              var mPrice = $(this).find('option:selected').data('price');
              var mCode = $(this).find('option:selected:last').data('id');
              if (mPrice != null){
                total+=mPrice;
                code +=mCode+',';
                $('#totalamount').val(total);
                $('#testcode').val(code);
              } else {
                
              }
            });
        </body>
            </html>
    

    【讨论】:

      猜你喜欢
      • 2019-07-24
      • 1970-01-01
      • 1970-01-01
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-28
      相关资源
      最近更新 更多