将输入文本与人员姓名进行比较,仅属于一个输入数字ID

时间:2019-02-14 10:03:38

标签: javascript jquery html html5

我正在尝试为两组字段编写验证。我有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>

我猜它也应该是“不断变化”的功能吗?还是可以点击进行验证?一些想法...?我实际上是在这里败北... 提前致谢!!!

3 个答案:

答案 0 :(得分:0)

也许对所有3个类使用不同的类名以使其唯一?

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

我不确定您的意思是什么,但是如果您想使输入类型唯一,并且在编写class =“ names half”时不全部调用它们,那么您应该给它们提供所有唯一的类名。

答案 1 :(得分: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验证,也要始终检查后端内部。但是,这超出了此答案的范围。

答案 2 :(得分: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;
            }
        }