比较输入文本与人名只属于一个输入数字ID

问题描述 投票:0回答:3

我试图为2组字段编写验证。我有6个输入,3个用于文本名称,3个用于id号...验证应该这样做“如果输入name="RE_SignedByID"有一个输入类型name="RE_SignedByName",那么其他输入name="RE_SignedByID",不应该包含相同的name="RE_SignedByName"更简单的解释...一个ID号码应该只有一个人名(Id号码对于一个人名称是唯一的。)我可以使用什么?我应该映射()所有输入吗?这些是我的输入:

<div id="signedBy" class="clearfix">
    <label>Signer, person ID & name</label>
    <span id="signedByID" class="ids half">
        <input type="text" name="RE_SignedByID" placeholder="personID, person1" data-validate="" tabindex="101" required>
        <input type="text" name="RE_SignedByID" placeholder="personID, person2" data-validate="" tabindex="103">
        <input type="text" name="RE_SignedByID" placeholder="personID, person3" data-validate="" tabindex="105">
    </span>
    <span class="names half">
        <input type="text" name="RE_SignedByName" placeholder="name, person1" tabindex="102" required>
        <input type="text" name="RE_SignedByName" placeholder="name, person2" tabindex="104">
        <input type="text" name="RE_SignedByName" placeholder="name, person3" tabindex="106">
    </span>
</div>

我想它也应该是一个“改变”功能?或者我可以点击进行验证吗?一些想法......?我实际上是在这里迷失了...在此先感谢!!!

javascript jquery html html5
3个回答
0
投票

也许为它们中的所有3个使用不同的类名来使它们独一无二?

<input class="name1">
<input class="name2">
<input class="name3">

我不确定你的意思但是如果你想让输入类型独特而且在你写class =“names half”时不要全部调用它们,那么你应该给它们所有唯一的类名。


0
投票

因此,根据我的理解,您不希望多个字段具有相同的值。我的方法是:

let inputTimeout = null; //set an empty timeout object
let vars = [null, null, null, null]; // create an array containing as many nulls as you have inputs
$('.nameInput').on('keyup', function(){
    let self = $(this);
    clearTimeout(inputTimeout); //clear the timeout
    inputTimeout = setTimeout(function(){ //set a timeout to check whether there is a dupe after the user has stopped typing
        if (vars.indexOf(self.val()) == -1){ //check if the vals array contains the newly entered string
            vars[self.attr('data-inputnum')] = self.val(); //insert the value into the array
        }else{
            //handle duplicates here
        }
    }, 500); //500ms is a sensible value for end of user input, change it if users complain that your app is too fast/slow
});

然后,您只需编辑一下HTML,以便所有名称输入都有一个共同的类(我使用.nameInput)并且有一个data-inputnum attr。这看起来像这样:

<input type="text" name="RE_SignedByName" placeholder="name, person1" tabindex="102" class='nameInput' data-whichinput='0'/>
<input type="text" name="RE_SignedByName" placeholder="name, person2" tabindex="103" class='nameInput' data-whichinput='1'/>
<!--and so on-->

当然,不要单独依赖JavaScript验证,也要在后端内部进行检查。然而,这将超出这个答案的范围。


0
投票

嗨感谢大家的帮助,让我意识到了一些事情,直到得到答案。这是我的工作代码:

var valSignedID = $("[name=SignedByID]").map(function() {
            return this.value.trim();
        }).get();

 var valOwnersID = $("[name=OwnersID]").map(function() {
            return this.value.trim();
        }).get();

 valSignedID.sort();
 valOwnersID.sort();

for (var i = 0; i < valSignedID.length - 1; i++) {
        if (valSignedID[i] == valSignedID[i + 1] && valSignedID[i] != "") {
            alert(" You can not have duplicated signers ID's");
                return false;
            //  break;
            }
        }
for (var i = 0; i < valSingedName.length; i++) {
        if (valSingedName[i] == valSingedName[i + 1] && valSingedName[i] != "")         {
            alert(valSingedName[i] + " should not have different ID");
            //return false;
            }
        }
© www.soinside.com 2019 - 2024. All rights reserved.