Validation does not work with ng-model

Asked

Viewed 236 times

0

Why doesn’t this validation work? When I was just

  $scope.exibeValidacaoTarefa = function(){
      return $scope.atividadeInput == null
            || $scope.atividadeInput.descAtividade == null
            || $scope.atividadeInput.descAtividade == ""
            || $scope.atividadeInput.solicitante == null
            || $scope.atividadeInput.solicitante == ""
            || $scope.tarefasSelecionadas == null 
            || $scope.tarefasSelecionadas.length <= 0;

}

It worked, but I added a condition for when the input ng-model="tarefaSelecionada.ordemTarefa" also be required, and now no longer works any validation. I did not understand which logic error

$scope.exibeValidacaoTarefa = function() {

  for (tarefa in $scope.tarefasSelecionadas) {
    if ($scope.tarefasSelecionadas[tarefa].ordemTarefa == null ||
      $scope.tarefasSelecionadas[tarefa].ordemTarefa == "" ||
      $scope.atividadeInput == null ||
      $scope.atividadeInput == "" ||
      $scope.atividadeInput.descAtividade == null ||
      $scope.atividadeInput.descAtividade == "" ||
      $scope.atividadeInput.solicitante == null ||
      $scope.atividadeInput.solicitante == "" ||
      $scope.tarefasSelecionadas == null ||
      $scope.tarefasSelecionadas.length <= 0) {

      return false;
    }
  }

}
<form name="atividadesForm">
  <div class="form-group">
    <label class="" for="orderBy">Nome</label> <input class="form-control" ng-model="atividadeInput.descAtividade" type="text" placeholder="Nome da atividade" id="nome-tarefa" ng-required="true" maxlength="100">
    <div class="help-block with-errors"></div>
  </div>
  <div class="form-group">
    <label class="" for="orderBy">Solicitante</label> <input class="form-control" ng-model="atividadeInput.solicitante" type="text" placeholder="Solicitante" id="" ng-required="true" maxlength="100">
    <div class="help-block with-errors"></div>
  </div>
  <div id="erroAtividade" class="alert alert-danger" ng-show="atividadesForm.$invalid">Por favor, preencha todos os campos.<br> Adicione pelo menos uma tarefa.</div>
  <div class="adiciona-tarefa">
    <button type="button" class="btn btn-primary btn-sm" data-title="Add" data-toggle="modal" data-target="#listagem-tarefas">
							<span class="glyphicon glyphicon-plus"></span>Tarefa
						</button>
  </div>
  <p>Tarefas</p>
  <div style="overflow: scroll; height: 200px; margin-top:12px;">
    <table class="table table-sm table table-striped table-bordered sorted_table">
      <tbody>
        <thead>
          <tr>
            <th>Ordem</th>
            <th>Código</th>
            <th>Nome</th>
            <th>Tipo</th>
            <th>Ação</th>
          </tr>
        </thead>
        <tr ng-repeat="tarefaSelecionada in tarefasSelecionadas">
          <td scope="row"><input type="text" class="form-control" name="numbers" ng-model="tarefaSelecionada.ordemTarefa" placeholder="" style=" width: 50px;" ng-required="true" maxlength="20" required></td>
          <td>{{tarefaSelecionada.codigo}}</td>
          <td>{{tarefaSelecionada.descricao}}</td>
          <td>{{tarefaSelecionada.descTipo}}</td>
          <td class="text-center">
            <p data-placement="top" data-toggle="tooltip" title="Excluir" class="acoes-btn">
              <button class="btn btn-danger btn-xs" ng-click="apagarSelecionada(tarefaSelecionada)" data-title="Delete" data-toggle="modal">
											<span class="glyphicon glyphicon-trash"></span>
										</button>
            </p>
          </td>
        </tr>
      </tbody>
    </table>

  </div>

</form>

<button type="button" class="btn btn-primary btn-md limpa-tarefas-em-atividades" 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

0


With the line

return false;

The evaluation is returning at the very end of the first cycle of for (tarefa in $scope.tarefasSelecionadas).

You need to iterate through all the items before you finish. Change your routine to something like this:

$scope.exibeValidacaoTarefa = function() {

var resultado = false;

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

  resultado = resultado || 
  $scope.atividadeInput == null ||
  $scope.atividadeInput == "" ||
  $scope.atividadeInput.descAtividade == null ||
  $scope.atividadeInput.descAtividade == "" ||
  $scope.atividadeInput.solicitante == null ||
  $scope.atividadeInput.solicitante == "" ||
  $scope.tarefasSelecionadas == null ||
  $scope.tarefasSelecionadas.length <= 0;

  return !resultado;
}
  • That’s right, thank you!

Browser other questions tagged

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