项目实践——利用标记避免表格行之间出现被重复赋值,同时避免去除自身

问题背景

这里写图片描述

    点击表格中的多行,通过填写表单号,来进行后续的操作。。。
    在我们填写表单号时,如何才能避免填入的表单号重复呢?
    还有一个问题,在去除重复时,我们必须判断比较重复的行不是自身。

其实在解决这个问题时,最开始,我以最普通的思维来解决:

顺序思维

我所指的是一条一条添加,也就是按顺序填写。这个时候,每次在判断时,只需要判断最后一条与前面的所有信息,只要没有重复即可认为不存在重复信息了? 到这里,你是否认为这样正确呢?
先按照这样解决,看一下我的解决方案:
//第一次循环获取总共表单编号的个数
        var count=0;//总个数
        jq("input[itemvarname='item100'][itembilltype='2']").each(function(){
            count++;
        })

        jq("input[itemvarname='item100'][itembilltype='2']").each(function(i,object){
            //如果输入的单据号是最后一条的话,需要将最后一条排除出重复序列
            if(i !=count-1){ //判断如果不是最后一个节点
                //判断是否与之前的节点值重复
                if(object.value==billNumber){
                    alert("输入的单据号已经存在,请重新输入!");
                    obj.val("");
                    return 
                }
            }

        })
这样做的核心是:只需要计算出总共的条数,这样我就可以判断出当前填的最后一条数据是第几条数据,这样只要将这条数据与之前的所有数据进行比较,没有重复即可。
听起来似乎已经很完美了,不是吗?

打破常规

后来,我忽然想到,假如,我现在全部填完了,但是忽然想要该其中的一个,也许就是改的第一个,或者第二个。。。这个可不一定哦?这个时候怎么办?之前的那种想法可就不成立了。

如果利用上面那种思维,通过个数来标记已经很不现实了,所以这次,我用了flag来进行标记。具体解决方案如下:
    //去除重复
        var flag=0;
        jq("input[itemvarname='item100'][itembilltype='2']").each(function(i,object){
            if(billNumber==object.value){
                flag=i; //做一个标记
            }
        })

        jq("input[itemvarname='item100'][itembilltype='2']").each(function(i,object){
            if(flag !=i && object.value==billNumber){
                alert("输入的单据号已经存在,请重新输入!");
                obj.val("");
                obj.parent().siblings().find("input[itemvarname='item46'][itembilltype='2']").attr({value:""});
                obj.parent().siblings().find("input[itemvarname='item115'][itembilltype='2']").attr({value:""});
                return 
            }
        })
通过做标记来解决赋值重复问题。当然这种解决方法有它的局限性,不知道你看出来了没啊?但是却很适合我的这种环境哦。

局限性:由于多次被标记会导致flag被覆盖,所以这种避免重复的方式只适合最多可能存在一次重复的情况。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值