我有一个表单,允许用户计算服务成本。我可以使用表单通过复选框和输入值*数据价格输出所选服务的总价格。但是,我还想创建他们选择的服务的摘要。
我试着从我提供的小提琴中得到的结果样本:
假设文本1的输入为3,并检查前两个复选框
Quote
Text 1 $29.85
Checkbox 1 $19.90
Checkbox 1 $45.95
Total $95.70
由于输入标签的实际复杂性,我想在输入和复选框字段中使用数据属性(比如我如何使用data-price)。
https://jsfiddle.net/evvaw9ta/
你可以添加一个 data-name
属性到输入,以便我们知道要在摘要中显示的名称。然后,使用带有id的div quote-summary
在HTML中,您可以使用此JS函数计算总和并显示摘要:
function calculateSum() {
var summary = [];
var sum = 0;
$("input.quote-input, .special-input:checked").each(function() {
if ($(this).prop('checked') || (!isNaN(this.value) && this.value.length !== 0)) {
var multiplier = $(this).prop('checked') ? 1 : parseFloat(this.value);
var price = parseFloat($(this).data('price')) * multiplier;
var name = $(this).data('name');
sum += price;
summary.push(name + '\t$' + price.toFixed(2));
}
});
$("#quoteTotal").html(sum.toFixed(2));
$('#quote-summary').html(summary.join('<br>'));
}
这是一个小提琴: https://jsfiddle.net/3ef3ypLz/
您可以像这样创建摘要。您必须为表单元素指定apt名称才能创建正确的摘要。
<script >
$(document).ready(function() {
$("input.quote-input").each(function() {
$(this).keyup(function() {
//alert($(this).attr('data-price'));
var price = parseFloat($(this).data('price')) * parseFloat(this.value);
price = price.toFixed(2);
var quotename = $(this).attr('name');
if(this.value) {
//$(".quote-sumamry").append(quotename +" $"+ price + " <br/>");
var summary;
if($("#" + quotename).length == 0) {
//it doesn't exist
summary = "<div id='"+quotename+"'>"+ quotename +" $" + price + " </div>\n";
$(".quote-sumamry").append(summary);
}
else {
$("#"+quotename).html(quotename +" $"+ price + " <br/>");
}
$("#"+quotename).show();
}
else {
$("#"+quotename).hide();
}
calculateSum();
});
});
$(".special-input").click(function() {
//alert($(this).is(':checked'));
var price = $(this).attr('data-price');
var quotename = $(this).attr('name');
// $(".quote-sumamry").append(quotename +" $"+ price + " <br/>");
if($(this).is(':checked')) {
var summary;
if($("#" + quotename).length == 0) {
//it doesn't exist
// alert("here");
summary = "<div id='"+quotename+"'>"+ quotename +" $" + price + " </div>\n";
$(".quote-sumamry").append(summary);
}
else {
$("#"+quotename).html(quotename +" $"+ price + " <br/>");
}
$("#"+quotename).show();
}
else {
$("#"+quotename).hide();
}
calculateSum();
});
});
function calculateSum() {
var sum = 0;
$("input.quote-input").each(function() {
if (!isNaN(this.value) && this.value.length != 0) {
sum += parseFloat($(this).data('price')) * parseFloat(this.value);
}
});
$(".special-input:checked").each(function() {
sum += parseFloat($(this).data('price'));
});
sum = sum.toFixed(2);
$("#quoteTotal").html(sum);
}
</script>
你可以添加一个 data-name
属性到输入,以便我们知道要在摘要中显示的名称。然后,使用带有id的div quote-summary
在HTML中,您可以使用此JS函数计算总和并显示摘要:
function calculateSum() {
var summary = [];
var sum = 0;
$("input.quote-input, .special-input:checked").each(function() {
if ($(this).prop('checked') || (!isNaN(this.value) && this.value.length !== 0)) {
var multiplier = $(this).prop('checked') ? 1 : parseFloat(this.value);
var price = parseFloat($(this).data('price')) * multiplier;
var name = $(this).data('name');
sum += price;
summary.push(name + '\t$' + price.toFixed(2));
}
});
$("#quoteTotal").html(sum.toFixed(2));
$('#quote-summary').html(summary.join('<br>'));
}
这是一个小提琴: https://jsfiddle.net/3ef3ypLz/
您可以像这样创建摘要。您必须为表单元素指定apt名称才能创建正确的摘要。
<script >
$(document).ready(function() {
$("input.quote-input").each(function() {
$(this).keyup(function() {
//alert($(this).attr('data-price'));
var price = parseFloat($(this).data('price')) * parseFloat(this.value);
price = price.toFixed(2);
var quotename = $(this).attr('name');
if(this.value) {
//$(".quote-sumamry").append(quotename +" $"+ price + " <br/>");
var summary;
if($("#" + quotename).length == 0) {
//it doesn't exist
summary = "<div id='"+quotename+"'>"+ quotename +" $" + price + " </div>\n";
$(".quote-sumamry").append(summary);
}
else {
$("#"+quotename).html(quotename +" $"+ price + " <br/>");
}
$("#"+quotename).show();
}
else {
$("#"+quotename).hide();
}
calculateSum();
});
});
$(".special-input").click(function() {
//alert($(this).is(':checked'));
var price = $(this).attr('data-price');
var quotename = $(this).attr('name');
// $(".quote-sumamry").append(quotename +" $"+ price + " <br/>");
if($(this).is(':checked')) {
var summary;
if($("#" + quotename).length == 0) {
//it doesn't exist
// alert("here");
summary = "<div id='"+quotename+"'>"+ quotename +" $" + price + " </div>\n";
$(".quote-sumamry").append(summary);
}
else {
$("#"+quotename).html(quotename +" $"+ price + " <br/>");
}
$("#"+quotename).show();
}
else {
$("#"+quotename).hide();
}
calculateSum();
});
});
function calculateSum() {
var sum = 0;
$("input.quote-input").each(function() {
if (!isNaN(this.value) && this.value.length != 0) {
sum += parseFloat($(this).data('price')) * parseFloat(this.value);
}
});
$(".special-input:checked").each(function() {
sum += parseFloat($(this).data('price'));
});
sum = sum.toFixed(2);
$("#quoteTotal").html(sum);
}
</script>