Jquery javascript 循环和计算中的下拉列表

Jquery javascript dropdown in a loop and calculation

我从 php while 循环中得到了一个下拉列表。将有多个 select 下拉框。当我 select 循环中的任何下拉列表时,后续文本框应更改值。

<html>
   <head>
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <title></title>
      <script type='text/javascript' src='http://code.jquery.com/jquery-1.10.1.js'></script>
      <script type='text/javascript'>//<![CDATA[
         $(window).load(function(){
         $("#category").change(function () {
         var dept_number = $(this).val();
         var price = $(this).find(':selected').data('price');
         $('#dept-input').val(dept_number);
         $('#price-input').val(price);
         });
         });//]]> 


      </script>
   </head>
   <body>
      <select id="category[]">
         <option value="1" data-price="10">Item 1 second</option>
         <option value="2" data-price="20">Item 2 second</option>
         <option value="3" data-price="30">Item 3 second</option>
      </select>
      <br><br>
      <label>Dept. num:</label>
      <input type="text" id="dept-input[]"></input>
      <br><br>
      <label>Price:</label>
      <input type="text" id="price-input[]"></input>
   </body>
</html>

此脚本正在循环运行。我将如何更改它以使用循环..提前谢谢你

<script type='text/javascript' src='http://code.jquery.com/jquery-1.10.1.js'></script>

<script type='text/javascript'>//<![CDATA[
$(window).load(function(){
$(document).ready(function(){
    $("select").on('change',function () {
        var dept_number = $(this).val();
        var price = $(this).find(':selected').data('price');
        $(this).siblings('.deptip').val(dept_number);
        $(this).siblings('.priceip').val(price);
        $(this).siblings('.total1').val(price * $(this).siblings('.total').data('value'));
    });
});
});//]]> 

</script>
<div class="base"> <!--Keep each group in base container-->
<table border="1"><tr>
    <td><select id="category0">
       <option value="1" data-price="10">Item 1 second</option>
       <option value="2" data-price="20">Item 2 second</option>
       <option value="3" data-price="30">Item 3 second</option>
    </select></td>
    <td><label>Dept. num:</label>
    <input type="text" class="deptip" id="dept-input"/><!--give them a class--></td>
    <td><label>Price:</label>
    <input type="text" class="priceip" id="price-input"/> <!--a class here too--></td>
    <td><label>Total:</label><input data-value="50" type="text" readonly class="total"/></td>
 <td><label>Total1:</label><input data-value="50" type="text" readonly class="total1"/></td>

</tr></table>
</div>

<div class="base"> <!--Keep each group in base container-->
<table border="1"><tr>
    <td><select id="category1">
       <option value="1" data-price="10">Item 1 second</option>
       <option value="2" data-price="20">Item 2 second</option>
       <option value="3" data-price="30">Item 3 second</option>
    </select></td>
    <td><label>Dept. num:</label>
    <input type="text" class="deptip" id="dept-input"/><!--give them a class--></td>
    <td><label>Price:</label>
    <input type="text" class="priceip" id="price-input"/> <!--a class here too--></td>
    <td><label>Total:</label><input data-value="50" type="text" readonly class="total"/></td>
 <td><label>Total1:</label><input data-value="50" type="text" readonly class="total1"/></td>

</tr></table>
</div>

<div class="base"> <!--Keep each group in base container-->
<table border="1"><tr>
    <td><select id="category2">
       <option value="1" data-price="10">Item 1 second</option>
       <option value="2" data-price="20">Item 2 second</option>
       <option value="3" data-price="30">Item 3 second</option>
    </select></td>
    <td><label>Dept. num:</label>
    <input type="text" class="deptip" id="dept-input"/><!--give them a class--></td>
    <td><label>Price:</label>
    <input type="text" class="priceip" id="price-input"/> <!--a class here too--></td>
    <td><label>Total:</label><input data-value="50" type="text" readonly class="total"/></td>
 <td><label>Total1:</label><input data-value="50" type="text" readonly class="total1"/></td>

</tr></table>
</div>

DEMO

  • Categorize your multiple selects into some parent div container and assign class to input elements in each container

例如:

<div class="base"> <!--Keep each group in base container-->
    <select id="category">
       <option value="1" data-price="10">Item 1 second</option>
       <option value="2" data-price="20">Item 2 second</option>
       <option value="3" data-price="30">Item 3 second</option>
    </select>
    <label>Dept. num:</label>
    <input type="text" class="deptip" id="dept-input"/><!--give them a class-->
    <label>Price:</label>
    <input type="text" class="priceip" id="price-input"/> <!--a class here too-->
</div>

<div class="base">
    <select id="category1">
       <option value="1" data-price="10">Item 1 second</option>
       <option value="2" data-price="20">Item 2 second</option>
       <option value="3" data-price="30">Item 3 second</option>
    </select>
    <label>Dept. num:</label>
    <input type="text" class="deptip" id="dept-input"/><!--same goes here-->
    <label>Price:</label>
    <input type="text" class="priceip" id="price-input"/><!--and here too-->
</div>

<div class="base">
    <select id="category2">
       <option value="1" data-price="10">Item 1 second</option>
       <option value="2" data-price="20">Item 2 second</option>
       <option value="3" data-price="30">Item 3 second</option>
    </select>
    <label>Dept. num:</label>
    <input type="text" class="deptip" id="dept-input"/>
    <label>Price:</label>
    <input type="text" class="priceip" id="price-input"/>
</div>
  • Write a common jquery on change event to select element.

例如:

$(document).ready(function(){ //Write it in document.ready()
    $("select").on('change',function () {
        var dept_number = $(this).val();
        var price = $(this).find(':selected').data('price');
        $(this).siblings('.deptip').val(dept_number); //find its siblings with classname 
        $(this).siblings('.priceip').val(price);
    });
});

更新

DEMO

希望每个小组都有 html

<label>Total:</label><input data-value="50" type="text" readonly class="total"/><br/>
<!-- Added value fetched from php to data-value attribute of input-->

所以您修改后的 JS 将如下所示:

$(document).ready(function(){
    $("select").on('change',function () {
        var dept_number = $(this).val();
        var price = $(this).find(':selected').data('price');
        $(this).siblings('.deptip').val(dept_number);
        $(this).siblings('.priceip').val(price);
        $(this).siblings('.total').val(price * $(this).siblings('.total').data('value'));//Add this line
    });
});

更新 2

DEMO

对于您当前的结构,您可以如下更改 script

$(document).ready(function(){
    $("select").on('change',function () {
        var dept_number = $(this).val();
        var price = $(this).find(':selected').data('price');
        $(this).closest('table').find('.deptip').val(dept_number);
        $(this).closest('table').find('.priceip').val(price);
        $(this).closest('table').find('.total').val(price * $(this).closest('table').find('.total').data('value'));
    });
});

基本上我们在这里找到被点击的 selectparent table,然后在 parent

中找到所需的元素

我认为您的代码中唯一的问题是生成的 HTML 在某些元素的 id 属性内包含 [] 方括号。删除它们应该可以解决您的问题:Example.

否则,如果您无法修改 HTML,那么,在尝试访问 JavaScript 中的字符时转义 字符:Example.

对于多个 select 元素,您可以 this.

片段:

var categories = $('select[id^=category]');
var deptNumbers = $('input[id^=dept-input]');
var priceNumbers = $('input[id^=price-input]');
categories.each(function(index) {
    $(this).change(function() {
        var dept_number = $(this).val();
        var price = $(this).find(':selected').data('price');
        deptNumbers.eq(index).val(dept_number);
        priceNumbers.eq(index).val(price);
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<select id="category[0]">
    <option value="1" data-price="10">Item 1 second</option>
    <option value="2" data-price="20">Item 2 second</option>
    <option value="3" data-price="30">Item 3 second</option>
</select>
<select id="category[1]">
    <option value="1" data-price="10">Item 1 second</option>
    <option value="2" data-price="20">Item 2 second</option>
    <option value="3" data-price="30">Item 3 second</option>
</select>
<br>
<br>
<label>Dept. num:</label>
<input type="text" id="dept-input[0]"></input>
<br>
<br>
<label>Price:</label>
<input type="text" id="price-input[0]"></input>
<br>
<br>
<label>Dept. num:</label>
<input type="text" id="dept-input[1]"></input>
<br>
<br>
<label>Price:</label>
<input type="text" id="price-input[1]"></input>

希望对您有所帮助。