计算折扣价格不显示为一个数字在jquery
Calculation for discount price not showing up as a number in jquery?
我正在尝试制作一个表单,根据所选择的日期和时间更新票价,在某些日子将打折,而其他日子则不会。
就门票定价而言,我一直使用HTML来存储和操作这些值,如下所示:
<tr>
<td>Adult</td>
<td>
<select class="qty" name="SA">
<option value="0">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>
<td>
<input type="text" value="18.00" class="price" readonly>
</td>
<td align="center">
<span class="amount">$0.00</span>
</td>
</tr>
工作原理
- 根据用户选择的下拉选项选择数量
value
。 数量值然后乘以价格,该价格存储在
<input>
HTML中的value
中,在本例中为18。<span>
然后更新结果,显示小计价格。- 注意:我有多个
<tr>
的部分是相同的这一个
用于计算的JS/jquery
//price of seating
function calculatePrice() {
var time = $("#whichSession").val(); // sets time to value
var day = $("#whichDay").val(); // sets day to value
var sum = 0;
$('#bookingTable > tbody > tr').each(function () {
var qty = $(this).find('option:selected').val();
var price = $(this).find('.price').val();
var amount = (qty * price)
sum += amount;
$(this).find('.amount').text('$' + amount.toFixed(2));
});
//just update the total to sum
$('#totalprice').val(sum.toFixed(2));
}
另一个用户建议我创建一个新函数,实时更新价格的value
,以便它可以获得适当的折扣值。
JS/jquery用于计算折扣价格
// calls get price function on day change
$('.qty').change(function () {
getPrices();
});
// sets value of price based on day and time
function getPrices ( day, time ) {
if ( day=='mon' || day == 'tue' || time=='1pm' ) {
prices = {SA:12, SP:10, SC:8, FA:25, FC:20, B1:20, B2:20, B3:20}
} else {
prices = {SA:18, SP:15, SC:12, FA:30, FC:25, B1:30, B2:30, B3:30}
}
return prices;
}
我的问题
当我使用alert
来显示它实际改变的值时,它似乎是正确的。然而,它在span
中打印为'$NaN',这意味着显示每张票的小计金额。
JSFiddle
我创建了一个小提琴,这样你们就可以看到整个东西是如何工作的。请原谅,如果任何代码是可疑的。当它在我的网站上时,效果会好得多。
很抱歉写了这么久。我只是想确保我把我的问题说得非常清楚。如果有什么不清楚的地方,请告诉我,我会尽力澄清的。
提前感谢!
问题是你的函数getPrices()
返回一个JavaScript对象,而不是一个数字。
如果你这样做了:
var amount = (qty * prices.SP);
代替:
var amount = (qty * price);
您的金额是一个数字,您可以对它进行数学运算
似乎需要使用特定的人类型来访问正确的价格。您可能需要读取它的值,如下所示:
$('#bookingTable > tbody > tr').each(function () {
var type= $(this).find('select:first').attr('name');
var qty = $(this).find('option:selected').val();
var amount = (qty * price[type])
sum += amount;
$(this).find('.amount').text('$' + amount.toFixed(2));
});
一个可能的解决方案是将初始选择保存在一个变量中,然后使用$。每个都要遍历价格,这是问题所在(它是一个对象)。下面是JSFiddle修改后的代码:
var subTotals = $('#bookingTable > tbody > tr');
var index = 0;
$.each(prices,function (key,value) {
var qty = subTotals.eq(index).find('option:selected').val();
var amount = (qty * value)
alert(amount);
sum += amount;
subTotals.eq(index++).find('.amount').text('$' + amount.toFixed(2));
});
相关文章:
- 递增一个数字而不去掉前导零
- 制作一个regex来验证只有一个数字的字符串
- 如何使用至少一个数字、一个大写字母和6-20个字符验证密码
- 有没有办法在里面看到一个数字'的64位浮点IEEE754表示
- 我如何解析二's是一个数字的补码字符串
- 为什么我需要在这里输入var,为什么它会给我一个数字作为答案?(Javascript)
- 为什么 JavaScript 如果一个数字有一个前导零,就将其视为八进制
- 增加一个数字并将其附加到函数
- 如何让计算机猜测一个数字并返回猜测次数(Javascript)
- 正则表达式删除最后一个数字之后的字符串
- 用户在文本框中输入一个数字,并根据使用 PHP 输入的数字重定向到另一个网页
- 每次使用 Javascript 加载页面时增加一个数字(变量)的简单方法
- Javascript Regexp :如果一个字母与一个数字相邻,请添加下划线
- jQuery UI Slider ui.value 获取最后一个数字
- JavaScript 使用多少位来表示一个数字
- Javascript提示和警报输入一个数字,它将循环,您将输入数字以获得它的平均值
- RXJS 为什么只有最后一个数字同时有 a 和 b
- 检查字符串是否等于一个单词和一个数字
- 对负指数调用的.toFixed()返回一个数字,而不是字符串
- 脚本每天添加相同的数字,月底再添加一个数字