Marcar erro no formulário usando o Bootstrap

194

Comecei a usar o Bootstrap para obter um bom design de página sem recorrer ao GWT (o back-end é feito em java)

Para minha tela de login, copiei este exemplo . Agora quero marcar um erro, por exemplo, que o nome de usuário foi deixado vazio. Então, eu queria saber qual é o procedimento na estrutura do Bootstrap para isso. Ou talvez se houver exemplos mostrando o formulário com erro.

Não tenho certeza se a idéia é mostrar a mensagem de erro dentro do elemento de entrada com uma cor vermelha, ou abaixo do elemento de entrada, ou talvez com um pop-up?

Luciano
fonte
1
A validação jquery do checkout. é bastante simples. bassistance.de/jquery-plugins/jquery-plugin-validation
Scott Simpson

Respostas:

275

(ATUALIZADO com exemplos para Bootstrap v4, v3 e v3)

Exemplos de formulários com classes de validação para as últimas versões principais do Bootstrap.

Bootstrap v4

Veja a versão ao vivo no codepen

validação de formulário bootstrap v4

<div class="container">
  <form>
    <div class="form-group row">
      <label for="inputEmail" class="col-sm-2 col-form-label text-success">Email</label>
      <div class="col-sm-7">
        <input type="email" class="form-control is-valid" id="inputEmail" placeholder="Email">
      </div>
    </div>

    <div class="form-group row">
      <label for="inputPassword" class="col-sm-2 col-form-label text-danger">Password</label>
      <div class="col-sm-7">
        <input type="password" class="form-control is-invalid" id="inputPassword" placeholder="Password">
      </div>
      <div class="col-sm-3">
        <small id="passwordHelp" class="text-danger">
          Must be 8-20 characters long.
        </small>      
      </div>
    </div>
  </form>
</div>

Bootstrap v3

Veja a versão ao vivo no codepen

validação de formulário bootstrap v3

<form role="form">
  <div class="form-group has-warning">
    <label class="control-label" for="inputWarning">Input with warning</label>
    <input type="text" class="form-control" id="inputWarning">
    <span class="help-block">Something may have gone wrong</span>
  </div>
  <div class="form-group has-error">
    <label class="control-label" for="inputError">Input with error</label>
    <input type="text" class="form-control" id="inputError">
    <span class="help-block">Please correct the error</span>
  </div>
  <div class="form-group has-info">
    <label class="control-label" for="inputError">Input with info</label>
    <input type="text" class="form-control" id="inputError">
    <span class="help-block">Username is taken</span>
  </div>
  <div class="form-group has-success">
    <label class="control-label" for="inputSuccess">Input with success</label>
    <input type="text" class="form-control" id="inputSuccess" />
    <span class="help-block">Woohoo!</span>
  </div>
</form>

Bootstrap v2

Veja a versão ao vivo no jsfiddle

validação de formulário bootstrap v2

A .error, .success, .warninge .infoas classes são acrescentados ao .control-group. Essa é a marcação e o estilo padrão do Bootstrap na v2. Basta seguir isso e você está em boa forma. É claro que você pode ir além de seus próprios estilos para adicionar um pop-up ou "flash embutido", se preferir, mas se você seguir a convenção do Bootstrap e suspender essas classes de validação, .control-groupele permanecerá consistente e fácil de gerenciar (pelo menos desde que você ' continuará a ter o benefício dos documentos e exemplos do Bootstrap)

  <form class="form-horizontal">
    <div class="control-group warning">
      <label class="control-label" for="inputWarning">Input with warning</label>
      <div class="controls">
        <input type="text" id="inputWarning">
        <span class="help-inline">Something may have gone wrong</span>
      </div>
    </div>
    <div class="control-group error">
      <label class="control-label" for="inputError">Input with error</label>
      <div class="controls">
        <input type="text" id="inputError">
        <span class="help-inline">Please correct the error</span>
      </div>
    </div>
    <div class="control-group info">
      <label class="control-label" for="inputInfo">Input with info</label>
      <div class="controls">
        <input type="text" id="inputInfo">
        <span class="help-inline">Username is taken</span>
      </div>
    </div>
    <div class="control-group success">
      <label class="control-label" for="inputSuccess">Input with success</label>
      <div class="controls">
        <input type="text" id="inputSuccess">
        <span class="help-inline">Woohoo!</span>
      </div>
    </div>
  </form>
jonschlinkert
fonte
130
Observe que com o Bootstrap 3 , você precisa alterar control-grouppara form-group, adicionar form-controlaos <input>elementos, help-inlinepara help-blocke warningpara has-warning.
Jim Stewart
@JimStewart obrigado! ótimo saber. Vou atualizar assim que eu tiver uma chance
jonschlinkert
11
Foi alterado no Bootstrap V3, #
Waqar Alamgir 15/10
8
O Bootstrap 3 usa classes diferentes, como erro-has. Pleaserefer getbootstrap.com/css
Nish
1
conforme mencionado na documentação do bootstrap3: O bootstrap inclui estilos de validação para estados de erro, aviso e êxito nos controles de formulário. Para usar, adicione .has-warning, .has-error ou .has-success ao elemento pai. Qualquer rótulo .control,-control .form e .help bloco dentro desse elemento
Nejmeddine Jammeli
147

Bootstrap V3 :

Link oficial do Doc 1 Link
oficial do Doc 2

<div class="form-group has-success">
  <label class="control-label" for="inputSuccess">Input with success</label>
  <input type="text" class="form-control" id="inputSuccess" />
  <span class="help-block">Woohoo!</span>
</div>
<div class="form-group has-warning">
  <label class="control-label" for="inputWarning">Input with warning</label>
  <input type="text" class="form-control" id="inputWarning">
  <span class="help-block">Something may have gone wrong</span>
</div>
<div class="form-group has-error">
  <label class="control-label" for="inputError">Input with error</label>
  <input type="text" class="form-control" id="inputError">
  <span class="help-block">Please correct the error</span>
</div>
Waqar Alamgir
fonte
1
É ótimo ter uma resposta v3, mas não inclui mensagens de erro.
Dave
Obrigado @Dave, mas sua sugestão foi rejeitada por outras pessoas, atualizei a resposta.
Waqar Alamgir
Seu link de demonstração não exibe o código que você postou.
precisa saber é
Obrigado @ayjay por apontar isso, infelizmente eles têm documentos separados para adicionar blocos de ajuda. Atualizado a resposta.
Waqar Alamgir
1
@fsasvari usa o sistema de grade assim: <div class = "form-group has-success"> <span class = "col-sm-12"> <label class = "control-label" for = "inputSuccess1"> Insira com success </label> </span> <span class = "col-sm-6"> <input type = "text" ária-descritaby = "helpBlock2" id = "inputSuccess1" class = "control-form"> </ span> <span class = "col-sm-6"> <span id = "helpBlock2" class = "help-block"> Um bloco de texto de ajuda que entra em uma nova linha. </span> </span> < / div>
Waqar Alamgir
16

Também é possível usar a seguinte classe enquanto estiver usando a classe modal de autoinicialização (v 3.3.7) ... help-inline e help-block não funcionaram no modal.

<span class="error text-danger">Some Errors related to something</span>

A saída se parece com algo abaixo:

Exemplo de texto de erro no modal

Jay
fonte
4

Bootstrap V3:

Uma vez que eu estava procurando por recursos do laravel, conheci essa incrível validação de formulário. Posteriormente, alterei os recursos do ícone de glifo. Agora, parece ótimo.

<div class="col-md-12">
<div class="form-group has-error has-feedback">
    <input id="enter email" name="email" type="text" placeholder="Enter email" class="form-control ">
    <span class="glyphicon glyphicon-remove form-control-feedback"></span>       
    <span class="help-block"><p>The Email field is required.</p></span>                                        
</div>
</div>
<div class="clearfix"></div>

<div class="col-md-6">
<div class="form-group has-error has-feedback">
    <input id="account_holder_name" name="name" type="text" placeholder="Name" class="form-control ">
    <span class="glyphicon glyphicon-remove form-control-feedback"></span>                                            
    <span class="help-block"><p>The Name field is required.</p></span>                                        
</div>
</div>
<div class="col-md-6">
<div class="form-group has-error has-feedback">
 <input id="check_np" name="check_no" type="text" placeholder="Check no" class="form-control ">
 <span class="glyphicon glyphicon-remove form-control-feedback"></span>
<span class="help-block"><p>The Check No. field is required.</p></span>                                       
</div>
</div>

Isto é o que parece: insira a descrição da imagem aqui

Depois de concluído, pensei em implementá-lo no Codeigniter também. Então, aqui está a validação do Codeigniter-3 com o Bootstrap:

Controlador

function addData()
{
$this->load->library('form_validation');
$this->form_validation->set_rules('email','Email','trim|required|valid_email|max_length[128]');
if($this->form_validation->run() == FALSE)
{
//validation fails. Load your view.
$this->loadViews('Load your view','pass your data to view if any');
}
else
{  
 //validation pass. Your code here.
}
}

Visão

<div class="col-md-12">
<?php 
 $email_error = (form_error('email') ? 'has-error has-feedback' : '');
 if(!empty($email_error)){
 $emailData = '<span class="help-block">'.form_error('email').'</span>';
 $emailClass = $email_error;
 $emailIcon = '<span class="glyphicon glyphicon-remove form-control-feedback"></span>';
}
else{
    $emailClass = $emailIcon = $emailData = '';
 } 
 ?>
<div class="form-group <?= $emailClass ?>">
<input id="enter email" name="email" type="text" placeholder="Enter email" class="form-control ">
<?= $emailIcon ?>
<?= $emailData ?>
</div>
</div>

Resultado: insira a descrição da imagem aqui

Avnish alok
fonte
3

Geralmente, é melhor mostrar o erro perto de onde ele ocorre. ou seja, se alguém tiver um erro ao inserir o email, você realça a caixa de entrada de email.

Este artigo tem alguns bons exemplos. http://uxdesign.smashingmagazine.com/2011/05/27/getting-started-with-defensive-web-design/

Além disso, o bootstrap do twitter tem um estilo interessante que ajuda nisso (role para baixo até a seção Estados de validação) http://twitter.github.com/bootstrap/base-css.html#forms

Destacar cada caixa de entrada é um pouco mais complicado, portanto, a maneira mais fácil seria colocar um alerta de autoinicialização na parte superior com detalhes do que o usuário fez de errado. http://twitter.github.com/bootstrap/components.html#alerts

hajpoj
fonte
1

Para o Bootstrap v4, use:
has-dangerpara form-groupwrapper,
form-control-dangerpara entrada para mostrar o ícone (será exibido the no final da entrada),
form-control-feedbackpara wrapper de mensagem

Exemplo:

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous">


<div class="form-group has-danger">
  <input type="text" class="form-control form-control-danger">
  <div class="form-control-feedback">Not valid :(</div>
</div>

Sojtin
fonte
0

Pode usar CSS para mostrar apenas a mensagem de erro.

.form-group.has-error .help-block {
    display: block;
}

.form-group .help-block {
    display: none;
}


<div class="form-group has-error">
  <label class="control-label" for="inputError">Input with error</label>
  <input type="text" class="form-control" id="inputError">
  <span class="help-block">Please correct the error</span>
</div>
kravits88
fonte