Сравните введенный текст с именем человека, который принадлежит только одному входному номеру - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь написать проверку для 2 групп полей.У меня есть 6 входов, 3 для имени текста и еще 3 для номера идентификатора ... проверка должна сделать это "если вход name="RE_SignedByID" имеет тип ввода name="RE_SignedByName", то другие входы name="RE_SignedByID" НЕ должны содержать то же самое name="RE_SignedByName" Более простое объяснение ... один идентификационный номер должен иметь только одно имя человека (идентификационный номер уникален для одного имени человека). Что я могу использовать для этого? Должен ли я отобразить () все входные данные? Это мои входные данные:

<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 голосов
/ 14 февраля 2019

Итак, насколько я понимаю, вы не хотите, чтобы несколько полей имели одинаковое значение.Мой подход заключается в следующем:

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.Это выглядело бы примерно так:

<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 голосов
/ 19 февраля 2019

Привет Спасибо всем за помощь, заставил меня понять пару вещей, пока я не получил ответ.Это мой рабочий код:

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;
            }
        }
0 голосов
/ 14 февраля 2019

Может быть, использовать разные имена классов для всех трех из них, чтобы сделать их уникальными?

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

Я не уверен, что вы имеете в виду, но если вы хотите сделать типы ввода уникальными и не вызывать их всекогда вы пишете class = "names half", вы должны дать им все уникальные имена классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...