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>
- 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);
});
});
更新
希望每个小组都有 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
对于您当前的结构,您可以如下更改 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'));
});
});
基本上我们在这里找到被点击的 select
的 parent 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>
希望对您有所帮助。
我从 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>
- Categorize your multiple
selects
into some parentdiv
container and assign class toinput
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
toselect
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);
});
});
更新
希望每个小组都有 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
对于您当前的结构,您可以如下更改 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'));
});
});
基本上我们在这里找到被点击的 select
的 parent 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>
希望对您有所帮助。