Проверка входных данных с одинаковым именем [] и классом разных строк - PullRequest
2 голосов
/ 17 мая 2019

У меня есть 3 ввода в div (повторяется несколько раз), я хочу проверить, что если пользователь вводит значение в coreid, необходимо вставить сумму и иметь значение на полное имя (оно дается с идентификаторомиз sql автоматически, если он не имеет значения .. идентификатор неверен) это в той же строке, так как они имеют все те же класс и имена, это делает проверку, но это не имеет значения, если они находятся ната же строка или нет .. это делает отправку, даже если я вставляю coreid в 1-й строке, полное имя в 3-й строке и сумму во 2-й строке.Любая помощь, пожалуйста?

$("#myform").submit(function() {
  var currentForm = this;

  var allinputs = 0;
  var coreid = 0;
  var fullname = 0;
  var amount = 0;
  //if all inputs are empty
  $(this).find('input.cardField').each(function() {
    if ($(this).val() != "") allinputs += 1;
  });
  if (allinputs) {
    //checks if coreid has a value
    $(this).find('input.cardField.id').each(function() {
      if ($(this).val() != "") coreid += 1;
    });
    //checks if fullname has a value
    $(this).find('input.cardField.name').each(function() {
      if ($(this).val() != "") fullname += 1;
    });
    //checks if amount has a value
    $(this).find('input.cardField.cardAmount').each(function() {
      if ($(this).val() != "") amount += 1;
    });

    //if user inserts an id it must have a value on name
    if (coreid) {
      var empty = $(this).parent().find("input.cardField.name").filter(function() {
        if ($(this).val() != "") fullname += 1;
      });
      if (fullname) {
        //the name is given when the user inserts the id
        alert("it has a name, the id is correct");
      } else {
        bootbox.alert('Please insert a valid id');
        return false;
      }
      //the user inserts an amount but not an id
    } else {
      bootbox.alert('Please insert an employee id');
      return false;
    }
  } else {
    //the user can continue if he confirms
    bootbox.confirm("Empty fields, Do you want to continue?",
      function(result) {
        if (result) {
          currentForm.submit();
        }
      });
    return false;
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
  <input type="number" name="coreid[]" class="form-control cardField id">
  <input type="text" name="fullName[]" class="form-control cardField name">
  <input type="number" name="amount[]" class="form-control cardField amount">
</div>
<div>
  <input type="number" name="coreid[]" class="form-control cardField id">
  <input type="text" name="fullName[]" class="form-control cardField name">
  <input type="number" name="amount[]" class="form-control cardField amount">
</div>
<div>
  <input type="number" name="coreid[]" class="form-control cardField id">
  <input type="text" name="fullName[]" class="form-control cardField name">
  <input type="number" name="amount[]" class="form-control cardField amount">
</div>

Если пользователь вставляет один из трех входов, он обязательно должен вставить 3 значения ... Независимо от того, являются ли другие строки (другие элементы div)пустой.

1 Ответ

1 голос
/ 17 мая 2019

Вы должны перебрать DIV. В каждом DIV получите значение поля id. Если он не пустой, проверьте два других поля.

$("#myform").submit(function() {
  var currentForm = this;

  var allinputs = 0;
  var missinginputs = false;
  //if all inputs are empty
  $(this).find('input.cardField').each(function() {
    if ($(this).val() != "") allinputs += 1;
  });
  if (allinputs) {
    //checks if coreid has a value
    $(this).find('div').each(function(index) {
      var coreid = $(this).find("input.cardField.id").val();
      var fullname = $(this).find("input.cardField.name").val();
      var amount = $(this).find("input.cardField.amount").val();
      if (coreid == "" && fullname == "" && amount == "") {
        // all inputs in row are empty, skip it
        return;
      } else if (coreid == "" || fullname == "" || amount == "") {
        bootbox.alert(`Enter all fields in row #${index}`);
        missinginputs = true;
      }
    });
    return !missinginputs;
  } else {
    //the user can continue if he confirms
    bootbox.confirm("Empty fields, Do you want to continue?",
      function(result) {
        if (result) {
          currentForm.submit();
        }
      });
    return false;
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form id="myform">
<div>
  <input type="number" name="coreid[]" class="form-control cardField id">
  <input type="text" name="fullName[]" class="form-control cardField name">
  <input type="number" name="amount[]" class="form-control cardField amount">
</div>
<div>
  <input type="number" name="coreid[]" class="form-control cardField id">
  <input type="text" name="fullName[]" class="form-control cardField name">
  <input type="number" name="amount[]" class="form-control cardField amount">
</div>
<div>
  <input type="number" name="coreid[]" class="form-control cardField id">
  <input type="text" name="fullName[]" class="form-control cardField name">
  <input type="number" name="amount[]" class="form-control cardField amount">
</div>
</form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...