【发布时间】:2020-10-23 06:39:40
【问题描述】:
我正在尝试创建一个分层定价表单,使我们能够根据客户的使用量来更改价格。
我创建了一个表单,我们可以在其中添加和删除层,但我希望能够验证这一点,所以第一个选项应该始终以 0 开头,最后一层应该没有最大值,应该没有重叠,层与层之间不应有间隙。
例如: 0-5、6-10、11-15、15-20、21+
而不是: 2-5、7-11、10-12、13-19、20+
function update_max(){
var pricing_tiers = document.getElementsByClassName("batch_pricing_tier");
for(var i=0; i<pricing_tiers.length; i++){
if(i!=0){
var previous_tier = pricing_tiers.item(i-1);
var previous_cols = previous_tier.children;
var previous_max = parseInt(previous_cols[0].children[0].children[1].value);
}else{
var previous_max = -1;
}
var pricing_tier = pricing_tiers.item(i);
var pricing_cols = pricing_tier.children;
var minimum = parseInt(pricing_cols[0].children[0].children[1].value);
var maximum = parseInt(pricing_cols[1].children[0].children[1].value);
if(minimum <= previous_max){
var new_min = previous_max+2;
pricing_cols[0].children[0].children[1].value = new_min;
minimum = new_min;
}
if(maximum <= minimum){
var new_max = minimum+1;
pricing_cols[1].children[0].children[1].value = new_max;
}
}
}
$(".batch_add").click(function(){
$("#batch_form > div > div:first-child").clone(true).insertBefore("#batch_form > div > div:last-child");
update_max();
});
$(".batch_remove").click(function(){
$(this).parent().parent().remove();
update_max();
});
$(".max_update").change(function(){
update_max();
});
$("#batch_pricing_submit").click(function(){
var pricing_array = [];
var pricing_tiers = document.getElementsByClassName("batch_pricing_tier");
for(var i=0; i<pricing_tiers.length; i++){
pricing_array[i] = {};
var pricing_tier = pricing_tiers.item(i);
var pricing_cols = pricing_tier.children;
var minimum = pricing_cols[0].children[0].children[1].value;
var maximum = pricing_cols[1].children[0].children[1].value;
var price = pricing_cols[2].children[0].children[1].value;
pricing_array[i]['minimum'] = minimum;
pricing_array[i]['maximum'] = maximum;
pricing_array[i]['price'] = price;
}
console.log(pricing_array);
});
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form class="form m-3" id="batch_form" method="POST">
<div>
<div class="row batch_pricing_tier">
<div class="col">
<div class="form-group">
<label for="minimum">Minimum</label>
<input class="form-control" type="text" value="0" required disabled>
</div>
</div>
<div class="col">
<div class="form-group">
<label for="maximum">Maximum</label>
<input class="form-control max_update" type="text" value="1" required>
</div>
</div>
<div class="col">
<div class="form-group">
<label for="price">Price</label>
<input class="form-control" type="text" placeholder="Price" name="price" id="price" required>
</div>
</div>
<div class="col">
<br /><span class="batch_remove float-right">Remove</span>
</div>
</div>
<div class="row batch_pricing_tier">
<div class="col">
<div class="form-group">
<label for="minimum">Minimum</label>
<input class="form-control" type="text" value="2" required disabled>
</div>
</div>
<div class="col">
<div class="form-group">
<label for="maximum">Maximum</label>
<input class="form-control max_update" type="text" value="inf" required disabled>
</div>
</div>
<div class="col">
<div class="form-group">
<label for="price">Price</label>
<input class="form-control" type="text" placeholder="Price" name="price" id="price" required>
</div>
</div>
<div class="col">
<br /><span class="batch_remove float-right">Remove</span>
</div>
</div>
</div>
<span class="d-block w-100 align-center">
<span class="batch_add float-right">Add fields</span>
<br />
<button class="btn btn-success" type="button" id="batch_pricing_submit" onclick="return false;">Add Batch Pricing</button>
</span>
</form>
编辑
这是基于使用的定价模型。因此,客户使用的越多,价格应该越便宜。例如:
$10/unit for 0 to 5 units.
$9/unit for 6 to 10 units.
$8/unit for 11 to 15 units.
因此,如果用户在一个计费周期内使用 8 个单位,他们将被收取 9 x 8 个单位的费用,总计 72 美元。
每种产品都不同,因此会有不同单位数量的不同层级,因此我需要对此进行验证。 我需要第一层最低从 0 开始。 任何层的最大值应大于最小值。 下一层的最小值应该大于上一层的最大值。 层与层之间不应有间隙。 各层之间不应有重叠。
【问题讨论】:
-
目前还不清楚你在期待什么。能详细点吗?
-
为字段编写输入示例和预期输出,并解释我们如何使用您的表单。事实上,这很难理解。
标签: javascript html forms validation