How to do not allow to type repeated numbers with angular

Asked

Viewed 601 times

1

How do I not allow repeated numbers to be entered in the validation? In my current validation, I can make it mandatory to fill in the fields to enable the save button and in this input taskSelected.ordemTarefa, I only allow validating the button by typing numbers, but it is possible to add this condition of not allowing repeat numbers in this list in validation?

//validação
$scope.exibeValidacaoTarefa = function() {
  for (var tarefa in $scope.tarefasSelecionadas) {
    if ($scope.tarefasSelecionadas[tarefa].ordemTarefa == null ||
      $scope.tarefasSelecionadas[tarefa].ordemTarefa == "") {
      return true;
    }
  }
  return $scope.atividadeInput == null ||
    $scope.atividadeInput == "" ||
    $scope.atividadeInput.descAtividade == null ||
    $scope.atividadeInput.descAtividade == "" ||
    $scope.atividadeInput.solicitante == null ||
    $scope.atividadeInput.solicitante == "" ||
    $scope.tarefasSelecionadas == null;
}

$scope.exibeValidacaoEditarTarefa = function() {
    for (var tarefa in $scope.tarefasSelecionadas) {
      if ($scope.tarefasSelecionadas[tarefa].ordemTarefa == null ||
        $scope.tarefasSelecionadas[tarefa].ordemTarefa == "") {
        return true;
      }
    }


    //submit
    $scope.adicionarAtividade = function(atividadeInput) {
      var codigo = "";
      atividadesInput.codigoAtividade = codigo;
      atividadesInput.descAtividade = $scope.atividadeInput.descAtividade;
      atividadesInput.solicitante = $scope.atividadeInput.solicitante;

      atividadesInput.matrizJson = [];
      for (var int = 0; int < $scope.tarefasSelecionadas.length; int++) {
        var gride = {};
        gride.codTarefa = $scope.tarefasSelecionadas[int].codigo;
        gride.ordemTarefa = $scope.tarefasSelecionadas[int].ordemTarefa;
        atividadesInput.matrizJson.push(gride)
      }

      atividadesAPI.saveAtividade(atividadesInput).success(function(data) {
        $(document).ready(function() {
          $("#ModalAdicionaAtividadeSucesso").modal('show');
        });
        $scope.atividadeInput = {};
        $scope.tarefasSelecionadas = {};
        carregarTarefas();
        carregarAtividades();
      }).error(function(data, status) {
        $(document).ready(function() {
          $("#ModalAdicionaAtividadeErro").modal('show');
        });
        $scope.message = "Aconteceu um problema: " + data;
      });


    };
<tr ng-repeat="tarefaSelecionada in tarefasSelecionadas">
  <td scope="row">
    <input type="number" class="form-control" name="numbers" ng-model="tarefaSelecionada.ordemTarefa" ng-required="true">
  </td>
</tr>

<button type="button" class="btn btn-primary btn-md" ng-click="adicionarAtividade(atividadeInput)" data-dismiss="modal" id="btn-cadastra-atividade" onclick="atualiza()" ng-disabled="exibeValidacaoTarefa()">
  <span class="glyphicon glyphicon-ok-sign"></span> Salvar
</button>

1 answer

1

Here a small function to check if a repeated letter/number has been typed, adapt as needed.

    var arr = [];
    function verificaDigitios(e) {
        var keynum;

        if (window.event) { // IE                    
            keynum = e.keyCode;
        } else if (e.which) { // Netscape/Firefox/Opera                   
            keynum = e.which;
        }
        var digito = String.fromCharCode(keynum);
        if (arr.includes(digito)) {
            alert("NÃO É PERMITIDO DIGITOS REPETIDOS!")
            return false;
        } else {
            arr.push(digito)
        }
    }
<input type="text" onkeypress="return verificaDigitios(event)" />

Code to check if the value has already been reported in another field.

The code below checks if the value has already been entered in another input, important inform a id for each field.

$(document).on("change", "input[type='text']", function() {
  var campoAtual = $(this);
    $("input[type='text']").each(function(){
      var input = $(this);
      if (campoAtual.attr('id') !== input.attr('id') && campoAtual.val() !== "") {
        if (campoAtual.val() === input.val()) {
          alert("NÃO PODE CONTER NÚMERO IGUAL, INFORME OUTRO.");
          campoAtual.val('');
          campoAtual.focus();
          return false;
        }
      }
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="form1">
    <p>
      #1 - Informe um número:<br />
      <input type="text" id="1" value="1" />
    </p>
    <p>
      #2 - Informe um número:<br />
      <input type="text" id="2" value="2" />
    </p>
    <p>
      #3 - Informe um número:<br />
      <input type="text" id="3" value="3" />
    </p>
    <p>
      #4 - Informe um número:<br />
      <input type="text" id="4" value="4" />
    </p>
    <p>
      #5 - Informe um número:<br />
      <input type="text" id="5" value="5" />
    </p>
  </form>

  • I think I was not very clear, the check is not to be able to repeat in the same input, it is to have an input list and in them it is not possible to type the same number, because this list is a sort list, cannot repeat, for example I cannot type the number 3 in an input and the other type again the 3

  • @Is this what you need? Adapt to your needs.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.