Javascript 创建和验证分层定价表单

Javascript 创建和验证分层定价表单,javascript,html,forms,validation,Javascript,Html,Forms,Validation,我正在尝试创建一个分层定价表单,允许我们根据客户的使用量更改价格 我已经创建了一个表单,我们可以在其中添加和删除层,但我希望能够验证这一点,因此第一个选项应始终以0开头,最后一个层上不应有最大值,不应有重叠,层之间不应有间隙 例如: 0-5,6-10,11-15,15-20,21+ 而不是: 2-5,7-11,10-12,13-19,20+ 函数更新_max(){ var定价层=document.getElementsByClassName(“批次定价层”); 对于(var i=0;i有两个验

我正在尝试创建一个分层定价表单,允许我们根据客户的使用量更改价格

我已经创建了一个表单,我们可以在其中添加和删除层,但我希望能够验证这一点,因此第一个选项应始终以0开头,最后一个层上不应有最大值,不应有重叠,层之间不应有间隙

例如: 0-5,6-10,11-15,15-20,21+

而不是: 2-5,7-11,10-12,13-19,20+

函数更新_max(){
var定价层=document.getElementsByClassName(“批次定价层”);

对于(var i=0;i有两个验证条件(以0开始,以inf结束),它们位于已知位置。所有其他条件(例如,无间隙和无重叠)是关于将每一层与下一层进行比较。因此,您可以从开始到倒数第二层循环,将
i
th层与
i+1
th层进行比较。这允许您检查这些条件,并准确找出不正确的内容和位置。如果未发现任何问题,则它是有效的

函数更新_max(){
var定价层=document.getElementsByClassName(“批次定价层”);
对于(var i=0;iif(minimum您可以编写update_max函数,使其能够更新字段,使其符合您的要求

函数更新_max(){
让前一个_max=-1;
让前一个_min=0;
$(“.batch\u pricing\u tier”)。每个(功能(i,el){
const minimumInput=$(el).find(“.min_update”)[0];
常量maximumInput=$(el).find(“.max_update”)[0];
设最小值=先前的最大值+1;
设最大值=数学最大值(数字(最大值),最小值+1);
上一个_min=最小值。值=最小值;
如果(!maximumInput.classList.contains(“last_max”))
上一个_max=maximumInput.value=maximum;
});
}
$(“.batch_add”)。单击(函数(){
$(“#批处理表单>div>div:first child”).clone(true).insertBefore(“#批处理表单>div>div:last child”);
更新_max();
});
$(“.batch_remove”)。单击(函数(){
$(this.parent().parent().remove();
更新_max();
});
$(“.max\u update”).change(update\u max);
$(“批量定价提交”)。单击(函数(){
var定价_数组=[];
$(“.batch\u pricing\u tier”)。每个(功能(i,el){
const minimumInput=$(el).find(“.min_update”)[0];
常量maximumInput=$(el).find(“.max_update”)[0];
const priceInput=$(el).find(“.price”)[0];
定价\u array.push({
最大值:数字(最小输入值),
最小值:数字(最大输入值),
价格:数字(priceInput.value),
});
});
log(定价数组);
});

最低限度
最大限度
价格

移除 最低限度 最大限度 价格
移除 添加字段
添加批量定价
检查以下代码段。原始代码有一些更改,但通常需要这样的更改

函数更新_max(索引,数量=1){
如果(索引>=0){
让val=(index==0?0:$(document).find('.row.batch_pricing_tier[data row=“'+index+']input.max_update').val());
$.each($(文档).find('.row.batch\u pricing\u tier'),(k,x)=>{
让row=parseInt($(x).attr('data-row');
如果(行>索引){
让items=$(x).find('input.form控件:not(.price');
美元。每个(项目,(i,y)=>{
if($(y).hasClass('max_update')){
$(y).val(parseInt($(items[i-1]).val())+数量);
}否则{
如果(索引==0&&行==1){
$(y).val(指数);
}否则{
$(y).val(parseInt($(document).find('.row.batch_pricing_tier[data row=“”+(row-1div>div:第一个子项”).clone(true);
$(“#批处理表单>div”).append(克隆);
let tiers=$(document.find('.row.batch\u pricing\u tier');
$(“#批处理表单>div>div:last child”).attr('data-row',tiers.length)
//更新_max(tiers.length-1);//默认数量1
更新_max(层长度-1,4);
});
$(“.batch_remove”)。单击(函数(){
let tiers=$(document.find('.row.batch\u pricing\u tier');
如果(层长度>1){
让index=$(this).parents('.row.batch\u pricing\u tier').attr('data-row');
$(this).parents('.row.batch\u pricing\u tier').remove();
$.each($(文档).find('.row.batch\u pricing\u tier'),(k,x)=>{
$(x).attr('数据行',k+1);
});
//更新_max(索引-1);//默认数量1
更新_max(索引-1,4);
}
});
$(文档).on(“更改”、“.max\u更新”,函数(){
让index=$(this).parents('.row.batch\u pricing\u tier').attr('data-row');
//更新_max(索引);//默认数量1
更新_max(索引,4);
});
$(“批量定价提交”)。单击(fu)