Ejupi contenido principal-pe Eike docs jeguatahápe
in English

Validación rehegua

Eme’ẽ ñe’ẽñemi ivaliosoitéva, ojejapokuaava ne puruhárape HTML5 formulario jegueroviauka reheve, kundahára reko ñepyrũrã térã estilo jeporupyre ha JavaScript rupive.

Roikuaa ko’áĝa umi estilo ha tembipuru’i jegueroviapy personalizado lado cliente-pegua ndojeikekuaái, ndojehecháigui umi tecnología oipytyvõvape. Romba’apo aja peteĩ solución rehe, romomarandu reipuru hag̃ua opción servidor-pegua térã kundahára jegueroviapyrã ñepyrũrã.

Mba’éichapa omba’apo

Ko’ápe ojehechauka mba’éichapa omba’apo formulario jegueroviauka Bootstrap ndive:

  • HTML formulario jegueroviapyrã ojeporu CSS mokõi pseudo-clase rupive, :invalidha :valid. Ojeporu <input>, <select>, ha <textarea>elemento-kuéra rehe.
  • Bootstrap ombohape umi :invalidha :validestilo mbo’esyry túvape .was-validated, jepivegua ojeporúva <form>. Nda’upéichairamo, oimeraẽva tenda oñeikotevẽva valor’ỹre ojehechauka ndovaléiha página jegueraha jave. Péicha, ikatu eiporavo araka’épa emomba’apova’erã (jepivegua oñeha’ã rire oñemondo formulario).
  • Oñemohendajey hag̃ua formulario jehechauka (techapyrã, umi formulario ñembohasa dinámico rehegua oipurúramo AJAX), eipeꞌa .was-validatedmboꞌepy pe <form>jey ñembohasa rire.
  • Peteĩ fallback ramo, .is-invalidha .is-validikatu ojeporu mbo’esyrykuéra umi pseudo-clase rangue jegueroviaukarã servidor-pegua . Ha’ekuéra noikotevẽi peteĩ .was-validatedclase tuvakuéra rehegua.
  • Ojejokógui mbaꞌeichaitépa ombaꞌapo CSS, ndaikatúi (koꞌág̃aite) ñamoĩ estilo peteĩ <label>oúva peteĩ control formulario mboyve DOM-pe JavaScript jeporupyre pytyvõꞌeỹre.
  • Opaite kundahára koꞌag̃agua oipytyvõ API jegueroviapyrã jejopy rehegua , peteĩ serie JavaScript mbaꞌekuaarã rehegua oñemboaje hag̃ua umi control formulario rehegua.
  • Marandu ñe’ẽñemi rehegua ikatu oipuru kundahára ñembohekorã (iñambuéva peteĩteĩva kundahárape g̃uarã, ha ndojejapóiva estilo CSS rupive) térã ñande estilo ñe’ẽñemi jeporupyre HTML ha CSS ambuéva reheve.
  • Ikatu eme’ẽ marandu jegueroviapyrã jeporupyre ndive setCustomValidityJavaScript-pe.

Upéva reheve, ehecha ko’ã demostración ore estilo validación formulario personalizado-pe g̃uarã, clase opcional lado servidor-pe g̃uarã ha navegador por defecto.

Estilos personalizados rehegua

Marandu jegueroviapyrã formulario Bootstrap jeporupyre rehegua, tekotevẽta emoĩ novalidateatributo booleano nde <form>. Kóva ombogue kundahára ñe’ẽñemi ñe’ẽmondo ñepyrũrã, ha katu ome’ẽ gueteri jeike umi API formulario jegueroviapyrãme JavaScript-pe. Eñeha’ã emondo pe formulario oĩva ko’ápe; ore JavaScript ojokóta pe botón ñemondo ha ombohasáta ndéve ñe’ẽñemi. Eñeha’ãvo emondo, rehecháta umi :invalidha :validestilo ojeporúva ne formulario control-kuérape.

Umi estilo ñe’ẽñemi jeporupyre oipuru sa’y jeporupyre, rembe’y, estilo enfoque ha icono fondo rehegua oikuaauka porãve hag̃ua ñe’ẽñemi. Umi icono fondo rehegua <select>s-pe g̃uarã ojeguereko , ndive añoite .form-select, ha ndahaꞌei .form-control.

Looks good!
Looks good!
@ .
Please choose a username.
Please provide a valid city.
Please select a valid state.
Please provide a valid zip.
You must agree before submitting.
<form class="row g-3 needs-validation" novalidate>
  <div class="col-md-4">
    <label for="validationCustom01" class="form-label">First name</label>
    <input type="text" class="form-control" id="validationCustom01" value="Mark" required>
    <div class="valid-feedback">
      Looks good!
    </div>
  </div>
  <div class="col-md-4">
    <label for="validationCustom02" class="form-label">Last name</label>
    <input type="text" class="form-control" id="validationCustom02" value="Otto" required>
    <div class="valid-feedback">
      Looks good!
    </div>
  </div>
  <div class="col-md-4">
    <label for="validationCustomUsername" class="form-label">Username</label>
    <div class="input-group has-validation">
      <span class="input-group-text" id="inputGroupPrepend">@</span>
      <input type="text" class="form-control" id="validationCustomUsername" aria-describedby="inputGroupPrepend" required>
      <div class="invalid-feedback">
        Please choose a username.
      </div>
    </div>
  </div>
  <div class="col-md-6">
    <label for="validationCustom03" class="form-label">City</label>
    <input type="text" class="form-control" id="validationCustom03" required>
    <div class="invalid-feedback">
      Please provide a valid city.
    </div>
  </div>
  <div class="col-md-3">
    <label for="validationCustom04" class="form-label">State</label>
    <select class="form-select" id="validationCustom04" required>
      <option selected disabled value="">Choose...</option>
      <option>...</option>
    </select>
    <div class="invalid-feedback">
      Please select a valid state.
    </div>
  </div>
  <div class="col-md-3">
    <label for="validationCustom05" class="form-label">Zip</label>
    <input type="text" class="form-control" id="validationCustom05" required>
    <div class="invalid-feedback">
      Please provide a valid zip.
    </div>
  </div>
  <div class="col-12">
    <div class="form-check">
      <input class="form-check-input" type="checkbox" value="" id="invalidCheck" required>
      <label class="form-check-label" for="invalidCheck">
        Agree to terms and conditions
      </label>
      <div class="invalid-feedback">
        You must agree before submitting.
      </div>
    </div>
  </div>
  <div class="col-12">
    <button class="btn btn-primary" type="submit">Submit form</button>
  </div>
</form>
// Example starter JavaScript for disabling form submissions if there are invalid fields
(function () {
  'use strict'

  // Fetch all the forms we want to apply custom Bootstrap validation styles to
  var forms = document.querySelectorAll('.needs-validation')

  // Loop over them and prevent submission
  Array.prototype.slice.call(forms)
    .forEach(function (form) {
      form.addEventListener('submit', function (event) {
        if (!form.checkValidity()) {
          event.preventDefault()
          event.stopPropagation()
        }

        form.classList.add('was-validated')
      }, false)
    })
})()

Navegador rehegua ñemboheko

¿Ndereinteresái marandu ñe’ẽñemi jegueroviapyrã jeporupyre térã ehai JavaScript emoambue hag̃ua formulario reko? Opa mba’e iporãva, ikatu reipuru umi kundahára ñepyrũrã. Eñeha’ã emondo pe formulario oĩva ko’ápe. Ojesarekóva ne kundahára ha SO rehe, rehecháta peteĩ estilo iñambue’imiva ñe’ẽñemi rehegua.

Ko’ã ñe’ẽñemi estilo ndaikatúiramo jepe oñemboheko CSS ndive, ikatu gueteri emohenda ñe’ẽñemi jehaipyre JavaScript rupive.

@ .
<form class="row g-3">
  <div class="col-md-4">
    <label for="validationDefault01" class="form-label">First name</label>
    <input type="text" class="form-control" id="validationDefault01" value="Mark" required>
  </div>
  <div class="col-md-4">
    <label for="validationDefault02" class="form-label">Last name</label>
    <input type="text" class="form-control" id="validationDefault02" value="Otto" required>
  </div>
  <div class="col-md-4">
    <label for="validationDefaultUsername" class="form-label">Username</label>
    <div class="input-group">
      <span class="input-group-text" id="inputGroupPrepend2">@</span>
      <input type="text" class="form-control" id="validationDefaultUsername"  aria-describedby="inputGroupPrepend2" required>
    </div>
  </div>
  <div class="col-md-6">
    <label for="validationDefault03" class="form-label">City</label>
    <input type="text" class="form-control" id="validationDefault03" required>
  </div>
  <div class="col-md-3">
    <label for="validationDefault04" class="form-label">State</label>
    <select class="form-select" id="validationDefault04" required>
      <option selected disabled value="">Choose...</option>
      <option>...</option>
    </select>
  </div>
  <div class="col-md-3">
    <label for="validationDefault05" class="form-label">Zip</label>
    <input type="text" class="form-control" id="validationDefault05" required>
  </div>
  <div class="col-12">
    <div class="form-check">
      <input class="form-check-input" type="checkbox" value="" id="invalidCheck2" required>
      <label class="form-check-label" for="invalidCheck2">
        Agree to terms and conditions
      </label>
    </div>
  </div>
  <div class="col-12">
    <button class="btn btn-primary" type="submit">Submit form</button>
  </div>
</form>

Servidor ykére

Ro’e porã eipuru hag̃ua jegueroviauka cliente ykére, ha katu reikotevẽramo jegueroviauka servidor ykére, ikatu ehechauka umi formulario tenda ndovaléiva ha añetegua .is-invalidha ndive .is-valid. Ñañamindu’u .invalid-feedbackoipytyvõha avei ko’ã mbo’esyry ndive.

Umi tenda ndoikóivape g̃uarã, eñangareko pe marandu ñe’ẽñemi/jejavy rehegua ndoikóiva oñembojoajuha pe formulario vore iñimportánteva ndive oipurúvo aria-describedby(eñatendéke ko atributo ohejaha oñemboheko hetave peteĩvagui id, oiméramo pe tenda ohechaukáma formulario jehaipyre ambuéva).

Oñemohenda hag̃ua mbaꞌevai radio frontera rehegua.has-validation , umi aty entrada rehegua oikotevẽ peteĩ clase adicional .

¡Ojehecha porã!
¡Ojehecha porã!
@ .
Eiporavo peteĩ puruhára réra.
Por favor, eme'ê peteî tavaguasu ovale.
Eiporavo peteĩ estado añetegua.
Por favor, eme'ẽ peteĩ cremallera válida.
Reñemoĩva’erã peteĩ ñe’ẽme remondo mboyve.
<form class="row g-3">
  <div class="col-md-4">
    <label for="validationServer01" class="form-label">First name</label>
    <input type="text" class="form-control is-valid" id="validationServer01" value="Mark" required>
    <div class="valid-feedback">
      Looks good!
    </div>
  </div>
  <div class="col-md-4">
    <label for="validationServer02" class="form-label">Last name</label>
    <input type="text" class="form-control is-valid" id="validationServer02" value="Otto" required>
    <div class="valid-feedback">
      Looks good!
    </div>
  </div>
  <div class="col-md-4">
    <label for="validationServerUsername" class="form-label">Username</label>
    <div class="input-group has-validation">
      <span class="input-group-text" id="inputGroupPrepend3">@</span>
      <input type="text" class="form-control is-invalid" id="validationServerUsername" aria-describedby="inputGroupPrepend3 validationServerUsernameFeedback" required>
      <div id="validationServerUsernameFeedback" class="invalid-feedback">
        Please choose a username.
      </div>
    </div>
  </div>
  <div class="col-md-6">
    <label for="validationServer03" class="form-label">City</label>
    <input type="text" class="form-control is-invalid" id="validationServer03" aria-describedby="validationServer03Feedback" required>
    <div id="validationServer03Feedback" class="invalid-feedback">
      Please provide a valid city.
    </div>
  </div>
  <div class="col-md-3">
    <label for="validationServer04" class="form-label">State</label>
    <select class="form-select is-invalid" id="validationServer04" aria-describedby="validationServer04Feedback" required>
      <option selected disabled value="">Choose...</option>
      <option>...</option>
    </select>
    <div id="validationServer04Feedback" class="invalid-feedback">
      Please select a valid state.
    </div>
  </div>
  <div class="col-md-3">
    <label for="validationServer05" class="form-label">Zip</label>
    <input type="text" class="form-control is-invalid" id="validationServer05" aria-describedby="validationServer05Feedback" required>
    <div id="validationServer05Feedback" class="invalid-feedback">
      Please provide a valid zip.
    </div>
  </div>
  <div class="col-12">
    <div class="form-check">
      <input class="form-check-input is-invalid" type="checkbox" value="" id="invalidCheck3" aria-describedby="invalidCheck3Feedback" required>
      <label class="form-check-label" for="invalidCheck3">
        Agree to terms and conditions
      </label>
      <div id="invalidCheck3Feedback" class="invalid-feedback">
        You must agree before submitting.
      </div>
    </div>
  </div>
  <div class="col-12">
    <button class="btn btn-primary" type="submit">Submit form</button>
  </div>
</form>

Umi elemento oipytyvõva

Umi estilo validación rehegua ojeguereko koꞌã control ha componente formulario rehegua:

  • <input>s ha <textarea>s ndive .form-control(oikehápe peteĩ peve .form-controlumi aty oikeva’ekuépe) .
  • <select>s ndive.form-select
  • .form-checks
Emoinge peteĩ marandu textarea-pe.
Techapyrã jehaipyre ñe’ẽñemi ndoikóiva
Hetave techapyrã jehaipyre ñe’ẽñemi ndovaléiva
Techapyrã jeporavopyre ñe’ẽñemi ndovaléiva
Techapyrã formulario vore ñe’ẽñemi ndovaléiva
<form class="was-validated">
  <div class="mb-3">
    <label for="validationTextarea" class="form-label">Textarea</label>
    <textarea class="form-control is-invalid" id="validationTextarea" placeholder="Required example textarea" required></textarea>
    <div class="invalid-feedback">
      Please enter a message in the textarea.
    </div>
  </div>

  <div class="form-check mb-3">
    <input type="checkbox" class="form-check-input" id="validationFormCheck1" required>
    <label class="form-check-label" for="validationFormCheck1">Check this checkbox</label>
    <div class="invalid-feedback">Example invalid feedback text</div>
  </div>

  <div class="form-check">
    <input type="radio" class="form-check-input" id="validationFormCheck2" name="radio-stacked" required>
    <label class="form-check-label" for="validationFormCheck2">Toggle this radio</label>
  </div>
  <div class="form-check mb-3">
    <input type="radio" class="form-check-input" id="validationFormCheck3" name="radio-stacked" required>
    <label class="form-check-label" for="validationFormCheck3">Or toggle this other radio</label>
    <div class="invalid-feedback">More example invalid feedback text</div>
  </div>

  <div class="mb-3">
    <select class="form-select" required aria-label="select example">
      <option value="">Open this select menu</option>
      <option value="1">One</option>
      <option value="2">Two</option>
      <option value="3">Three</option>
    </select>
    <div class="invalid-feedback">Example invalid select feedback</div>
  </div>

  <div class="mb-3">
    <input type="file" class="form-control" aria-label="file example" required>
    <div class="invalid-feedback">Example invalid form file feedback</div>
  </div>

  <div class="mb-3">
    <button class="btn btn-primary" type="submit" disabled>Submit form</button>
  </div>
</form>

Tembipururã ñe’ẽmondo

Nde formulario ñemohenda ohejáramo, ikatu embohasa umi .{valid|invalid}-feedbackmbo’esyry .{valid|invalid}-tooltipmbo’esyry rehegua ohechauka hag̃ua ñe’ẽñemi jegueroviapyrã peteĩ tembipuru’i ñe’ẽmondo estilo-pe. Ejeasegura eguereko peteĩ túva orekóva position: relativehese posicionamiento consejo de herramientas-pe g̃uarã. Pe techapyrã iguýpe, ore mbo’esyry columna rehegua oguerekóma kóva, ha katu ne proyecto ikatu oikotevẽ peteĩ configuración alternativa.

Looks good!
Looks good!
@ .
Please choose a unique and valid username.
Please provide a valid city.
Please select a valid state.
Please provide a valid zip.
<form class="row g-3 needs-validation" novalidate>
  <div class="col-md-4 position-relative">
    <label for="validationTooltip01" class="form-label">First name</label>
    <input type="text" class="form-control" id="validationTooltip01" value="Mark" required>
    <div class="valid-tooltip">
      Looks good!
    </div>
  </div>
  <div class="col-md-4 position-relative">
    <label for="validationTooltip02" class="form-label">Last name</label>
    <input type="text" class="form-control" id="validationTooltip02" value="Otto" required>
    <div class="valid-tooltip">
      Looks good!
    </div>
  </div>
  <div class="col-md-4 position-relative">
    <label for="validationTooltipUsername" class="form-label">Username</label>
    <div class="input-group has-validation">
      <span class="input-group-text" id="validationTooltipUsernamePrepend">@</span>
      <input type="text" class="form-control" id="validationTooltipUsername" aria-describedby="validationTooltipUsernamePrepend" required>
      <div class="invalid-tooltip">
        Please choose a unique and valid username.
      </div>
    </div>
  </div>
  <div class="col-md-6 position-relative">
    <label for="validationTooltip03" class="form-label">City</label>
    <input type="text" class="form-control" id="validationTooltip03" required>
    <div class="invalid-tooltip">
      Please provide a valid city.
    </div>
  </div>
  <div class="col-md-3 position-relative">
    <label for="validationTooltip04" class="form-label">State</label>
    <select class="form-select" id="validationTooltip04" required>
      <option selected disabled value="">Choose...</option>
      <option>...</option>
    </select>
    <div class="invalid-tooltip">
      Please select a valid state.
    </div>
  </div>
  <div class="col-md-3 position-relative">
    <label for="validationTooltip05" class="form-label">Zip</label>
    <input type="text" class="form-control" id="validationTooltip05" required>
    <div class="invalid-tooltip">
      Please provide a valid zip.
    </div>
  </div>
  <div class="col-12">
    <button class="btn btn-primary" type="submit">Submit form</button>
  </div>
</form>

Sass rehegua

Variables rehegua

$form-feedback-margin-top:          $form-text-margin-top;
$form-feedback-font-size:           $form-text-font-size;
$form-feedback-font-style:          $form-text-font-style;
$form-feedback-valid-color:         $success;
$form-feedback-invalid-color:       $danger;

$form-feedback-icon-valid-color:    $form-feedback-valid-color;
$form-feedback-icon-valid:          url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>");
$form-feedback-icon-invalid-color:  $form-feedback-invalid-color;
$form-feedback-icon-invalid:        url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>");

Mixin-kuéra rehegua

Mokõi mixin oñembojoaju oñondive, ñande bucle rupive , omoheñói hag̃ua ñande estilo de retroalimentación validación formulario rehegua.

@mixin form-validation-state-selector($state) {
  @if ($state == "valid" or $state == "invalid") {
    .was-validated #{if(&, "&", "")}:#{$state},
    #{if(&, "&", "")}.is-#{$state} {
      @content;
    }
  } @else {
    #{if(&, "&", "")}.is-#{$state} {
      @content;
    }
  }
}

@mixin form-validation-state(
  $state,
  $color,
  $icon,
  $tooltip-color: color-contrast($color),
  $tooltip-bg-color: rgba($color, $form-feedback-tooltip-opacity),
  $focus-box-shadow: 0 0 $input-btn-focus-blur $input-focus-width rgba($color, $input-btn-focus-color-opacity)
) {
  .#{$state}-feedback {
    display: none;
    width: 100%;
    margin-top: $form-feedback-margin-top;
    @include font-size($form-feedback-font-size);
    font-style: $form-feedback-font-style;
    color: $color;
  }

  .#{$state}-tooltip {
    position: absolute;
    top: 100%;
    z-index: 5;
    display: none;
    max-width: 100%; // Contain to parent when possible
    padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x;
    margin-top: .1rem;
    @include font-size($form-feedback-tooltip-font-size);
    line-height: $form-feedback-tooltip-line-height;
    color: $tooltip-color;
    background-color: $tooltip-bg-color;
    @include border-radius($form-feedback-tooltip-border-radius);
  }

  @include form-validation-state-selector($state) {
    ~ .#{$state}-feedback,
    ~ .#{$state}-tooltip {
      display: block;
    }
  }

  .form-control {
    @include form-validation-state-selector($state) {
      border-color: $color;

      @if $enable-validation-icons {
        padding-right: $input-height-inner;
        background-image: escape-svg($icon);
        background-repeat: no-repeat;
        background-position: right $input-height-inner-quarter center;
        background-size: $input-height-inner-half $input-height-inner-half;
      }

      &:focus {
        border-color: $color;
        box-shadow: $focus-box-shadow;
      }
    }
  }

  // stylelint-disable-next-line selector-no-qualifying-type
  textarea.form-control {
    @include form-validation-state-selector($state) {
      @if $enable-validation-icons {
        padding-right: $input-height-inner;
        background-position: top $input-height-inner-quarter right $input-height-inner-quarter;
      }
    }
  }

  .form-select {
    @include form-validation-state-selector($state) {
      border-color: $color;

      @if $enable-validation-icons {
        &:not([multiple]):not([size]),
        &:not([multiple])[size="1"] {
          padding-right: $form-select-feedback-icon-padding-end;
          background-image: escape-svg($form-select-indicator), escape-svg($icon);
          background-position: $form-select-bg-position, $form-select-feedback-icon-position;
          background-size: $form-select-bg-size, $form-select-feedback-icon-size;
        }
      }

      &:focus {
        border-color: $color;
        box-shadow: $focus-box-shadow;
      }
    }
  }

  .form-check-input {
    @include form-validation-state-selector($state) {
      border-color: $color;

      &:checked {
        background-color: $color;
      }

      &:focus {
        box-shadow: $focus-box-shadow;
      }

      ~ .form-check-label {
        color: $color;
      }
    }
  }
  .form-check-inline .form-check-input {
    ~ .#{$state}-feedback {
      margin-left: .5em;
    }
  }

  .input-group .form-control,
  .input-group .form-select {
    @include form-validation-state-selector($state) {
      @if $state == "valid" {
        z-index: 1;
      } @else if $state == "invalid" {
        z-index: 2;
      }
      &:focus {
        z-index: 3;
      }
    }
  }
}

Mapa rehegua

Kóva ha’e pe mapa Sass validación rehegua oúva _variables.scss. Embogue térã embohape kóva emoheñói hag̃ua estado iñambuéva térã ambuéva.

$form-validation-states: (
  "valid": (
    "color": $form-feedback-valid-color,
    "icon": $form-feedback-icon-valid
  ),
  "invalid": (
    "color": $form-feedback-invalid-color,
    "icon": $form-feedback-icon-invalid
  )
);

Umi mapa de $form-validation-statesikatu oguereko mbohapy parámetro opcional oñemboyke hag̃ua tembipuru’i ñe’ẽmondo ha estilo enfoque rehegua.

Ojepuru ojeitera hag̃ua $form-validation-statesmapa valorkuéra ári ojejapo hag̃ua ñande estilo validación rehegua. Oimeraẽ ñemoambue Sass mapa yvateguápe ojehechaukáta ne CSS oñembohekopyrévape ko vore rupive.

@each $state, $data in $form-validation-states {
  @include form-validation-state($state, $data...);
}

Personalización rehegua

Umi estado validación rehegua ikatu oñemboheko Sass rupive $form-validation-statesmapa ndive. Oĩva ore _variables.scssrembiapokue ryepýpe, ko Sass mapa haꞌehína mbaꞌeichaitépa ñamoheñói umi estado por defecto valid/ invalidvalidación rehegua. Oike peteĩ mapa anidado oñemboheko hag̃ua peteĩteĩva estado sa’y, ikóna, tembipuru’i ñe’ẽmondo sa’y ha enfoque sombra. Ndaipóriramo jepe ambue estado oipytyvõva kundahára, umi oipurúva estilo personalizado ikatu omoĩve fácilmente formulario ñe’ẽñemi ikomplikadovéva.

Eñatendéke ndoro’eporãiha emohenda hag̃ua $form-validation-statesmba’ekuaarã remoambue’ỹre avei form-validation-statemixin .