jquery - 使用jquery根据所选项目的数量自动计算总成本
问题描述
我有以下代码,旨在根据用户选择的每种类型的房间数量计算总成本。
我的问题是脚本只会增加成本,即使roomNo
从较高的数字更改为较低的数字也是如此。即,如果用户选择2
然后将其更改为1
,则numberOfRooms
变为3
而不是以1
相同的方式增加成本而不是降低成本。
有没有一种方法可以让我知道某个特定的选择值是否已减少?这是来自的选项选择roomNo
结构
$(document).ready(function() {
$(".quantity").on('change', function() {
var roomNo = $(this).children('option:selected').val();
var cost = $(this).parent().parent().find('.charge p').text();
var totalRoomCost = roomNo * cost;
var oldRoomNo = $('.room_no').val();
var numberOfRooms = parseInt(oldRoomNo) + parseInt(roomNo);
var oldCost = $('.total_cost').val();
var final_cost = parseInt(oldCost) + totalRoomCost;
//alert(totalCost);
$('.room_no').val(numberOfRooms);
$('.total_cost').val(final_cost);
});
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tr>
<td><u class="text-success"><b>Delux Single</b></u><br><small></small></td>
<td> <i class="fa fa-user" aria-hidden="true"></i></td>
<td colspan="3">
<table>
<tbody>
<tr>
<td class="charge">
<p>1600</p>
</td>
<td class="text-success">Bed Only</td>
<td>
<select name="quantity" class="quantity" required="">
<option value="">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
</select>
</td>
</tr>
<tr>
<td class="charge">
<p>1800</p>
</td>
<td class="text-success">Bed and breakfast</td>
<td>
<select name="quantity" class="quantity" required="">
<option value="">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
</select>
</td>
</tr>
<tr>
<td class="charge">
<p>2000</p>
</td>
<td class="text-success">Half Board</td>
<td>
<select name="quantity" class="quantity" required="">
<option value="">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
</select>
</td>
</tr>
<tr>
<td class="charge">
<p>2200</p>
</td>
<td class="text-success">Full Board</td>
<td>
<select name="quantity" class="quantity" required="">
<option value="">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
</select>
</td>
</tr>
</tbody>
</table>
</td>
<td><a href="">Reserve</a></td>
</tr>
</table>
<div class="col-2">
<div class='form-group'>
<input type='text' name ='quantity' class='form-control room_no' readonly='readonly' value="0"/>
</div>
<div class='form-group'>
<input type='text' name ='total_cost' class='form-control total_cost' readonly='readonly' value="0"/>
</div>
<input type='submit' value='Reserve'/>
</div>
解决方案
您可以使用.each
循环遍历您的选择框并获取费用值和房间计算它们,最后在所需的输入中添加结果。
演示代码:
$(document).ready(function() {
$(".quantity").on('change', function() {
var totalRoomCost = 0
var numberOfRooms = 0
//loop through each select
$(".quantity").each(function() {
var roomNo = $(this).val() != "" ? parseInt($(this).val()) : 0;
var cost = parseInt($(this).closest("tr").find('.charge p').text());
totalRoomCost += roomNo * cost;
numberOfRooms += roomNo
})
$('.room_no').val(numberOfRooms);
$('.total_cost').val(totalRoomCost);
});
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tr>
<td><u class="text-success"><b>Delux Single</b></u><br><small></small></td>
<td> <i class="fa fa-user" aria-hidden="true"></i></td>
<td colspan="3">
<table>
<tbody>
<tr>
<td class="charge">
<p>1600</p>
</td>
<td class="text-success">Bed Only</td>
<td>
<select name="quantity" class="quantity" required="">
<option value="">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
</select>
</td>
</tr>
<tr>
<td class="charge">
<p>1800</p>
</td>
<td class="text-success">Bed and breakfast</td>
<td>
<select name="quantity" class="quantity" required="">
<option value="">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
</select>
</td>
</tr>
<tr>
<td class="charge">
<p>2000</p>
</td>
<td class="text-success">Half Board</td>
<td>
<select name="quantity" class="quantity" required="">
<option value="">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
</select>
</td>
</tr>
<tr>
<td class="charge">
<p>2200</p>
</td>
<td class="text-success">Full Board</td>
<td>
<select name="quantity" class="quantity" required="">
<option value="">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
</select>
</td>
</tr>
</tbody>
</table>
</td>
<td><a href="">Reserve</a></td>
</tr>
</table>
<div class="col-2">
<div class='form-group'>
<input type='text' name='quantity' class='form-control room_no' readonly='readonly' value="0" />
</div>
<div class='form-group'>
<input type='text' name='total_cost' class='form-control total_cost' readonly='readonly' value="0" />
</div>
<input type='submit' value='Reserve' />
</div>
推荐阅读
- pandas - 在 Pandas 中向量化条件更新操作
- arrays - API 在反应中显示数组映射
- angular - 实施 Angular 国际化 (i18n) 后路线混乱
- php - ACF Wordpress 显示图像简码问题
- python - 在 Python 中安装 PyGame 时出现错误
- excel - 如何使一个字符串等于另一个字符串
- javascript - 以下代码是否同步返回已解决的承诺?
- powerbi - DAX:仅当数据集中所有年份的数据都存在时才计算
- r - 如何修复地图上不正确的自动标签(tmap)
- python - 如何将robotframework-hub生成的libdoc保存到本地