Jya ku bintu nyamukuru Jya kuri docs
Check
in English

Kwemeza

Tanga ibitekerezo byingirakamaro, bifatika kubakoresha ukoresheje ifishi ya HTML5 yemewe, ukoresheje imyitwarire idasanzwe ya mushakisha cyangwa imiterere yihariye na JavaScript.

Twese tuzi ko kuri ubu abakiriya-uruhande rwihariye rwo kwemeza uburyo hamwe nibikoresho byifashishwa bitagerwaho, kubera ko bidahuye nikoranabuhanga rifasha. Mugihe dukora kubisubizo, twasaba ko dukoresha uburyo bwa seriveri kuruhande cyangwa uburyo busanzwe bwo kwemeza mushakisha.

Uburyo ikora

Dore uko ifishi yo kwemeza ikorana na Bootstrap:

  • Ifishi ya HTML yemewe ikoreshwa binyuze muri CSS ibyiciro bibiri bya pseudo, :invalidna :valid. Bireba Kuri <input>, <select>na <textarea>Ibintu.
  • Bootstrap isimbuza i :invalidna :validstil kurwego rwababyeyi .was-validated, mubisanzwe bikoreshwa kuri <form>. Bitabaye ibyo, umurima wose usabwa udafite agaciro ugaragara nkaho utemewe kurupapuro rwumutwaro. Ubu buryo, urashobora guhitamo igihe cyo kubikora (mubisanzwe nyuma yo gutanga impapuro zagerageje).
  • Kugirango usubiremo isura yifishi (kurugero, mugihe cyoherejwe na dinamike yoherejwe ukoresheje AJAX), kura .was-validatedibyiciro <form>byongeye nyuma yo gutanga.
  • Nkugusubira inyuma, .is-invalidkandi .is-validamasomo arashobora gukoreshwa aho gukoresha pseudo-amasomo ya seriveri-yo kwemeza . Ntibasaba .was-validatedishuri ryababyeyi.
  • Bitewe nimbogamizi muburyo CSS ikora, ntidushobora (kurubu) gukoresha uburyo kuri a <label>biza mbere yo kugenzura ifishi muri DOM tutabifashijwemo na JavaScript yihariye.
  • Mucukumbuzi zose zigezweho zishyigikira kwemeza API , urukurikirane rwuburyo bwa JavaScript bwo kwemeza igenzura.
  • Ubutumwa bwo gutanga ibitekerezo bushobora gukoresha ibisanzwe bya mushakisha (bitandukanye kuri buri mushakisha, kandi ntibishobora gukoreshwa binyuze kuri CSS) cyangwa uburyo bwo gutanga ibitekerezo byihariye hamwe na HTML hamwe na CSS.
  • Urashobora gutanga ubutumwa bwemewe hamwe na setCustomValidityJavaScript.

Hamwe nibitekerezo, suzuma demo zikurikira kumiterere yacu yo kwemeza uburyo bwo kwemeza, ibyiciro bya seriveri kuruhande, hamwe na mushakisha isanzwe.

Imiterere yihariye

Kubisanzwe Bootstrap ifishi yubutumwa bwo kwemeza, uzakenera kongeramo novalidateikiranga boolean yawe <form>. Ibi birahagarika amashakiro yububiko bwibitekerezo, ariko biracyatanga uburyo bwo kwemeza APIs muri JavaScript. Gerageza gutanga urupapuro rukurikira; JavaScript yacu izahagarika buto yohereza no gutanga ibitekerezo kuri wewe. Mugihe ugerageza gutanga, uzabona imiterere :invalidnuburyo :validbukoreshwa muburyo bugenzura.

Uburyo bwo gutanga ibitekerezo bwigenga bukoresha amabara yihariye, imipaka, uburyo bwo kwibandaho, hamwe nibishushanyo mbonera kugirango tumenye neza ibitekerezo. Amashusho yinyuma ya <select>s arahari gusa .form-select, kandi ntabwo .form-control.

Birasa neza!
Birasa neza!
@
Nyamuneka hitamo izina ukoresha.
Nyamuneka tanga umujyi wemewe.
Nyamuneka hitamo leta yemewe.
Nyamuneka tanga zipi yemewe.
Ugomba kubyemera mbere yo gutanga.
html
<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
(() => {
  'use strict'

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

  // Loop over them and prevent submission
  Array.from(forms).forEach(form => {
    form.addEventListener('submit', event => {
      if (!form.checkValidity()) {
        event.preventDefault()
        event.stopPropagation()
      }

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

Mucukumbuzi isanzwe

Ntabwo ushishikajwe no kwemeza ibitekerezo byemewe cyangwa kwandika JavaScript kugirango uhindure imyitwarire? Byose byiza, urashobora gukoresha mushakisha isanzwe. Gerageza gutanga urupapuro rukurikira. Ukurikije amashusho yawe na OS, uzabona uburyo butandukanye bwo gutanga ibitekerezo.

Mugihe ubu buryo bwo gutanga ibitekerezo budashobora kwandikwa na CSS, urashobora guhitamo inyandiko yatanzwe binyuze muri JavaScript.

@
html
<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>

Uruhande rwa seriveri

Turasaba gukoresha umukiriya-kwemeza, ariko mugihe ukeneye seriveri kuruhande rwemeza, urashobora kwerekana ifishi itemewe kandi yemewe hamwe .is-invalidna .is-valid. Menya ko .invalid-feedbacknayo ishyigikiwe naya masomo.

Kubice bitemewe, menya neza ko ibitekerezo / amakosa yubutumwa butemewe bifitanye isano numwanya wabigenewe ukoresheje aria-describedby(wibuke ko iyi miterere yemerera ibirenze imwe idkwerekanwa, mugihe umurima umaze kwerekana inyandiko yinyongera).

Kugira ngo ukemure ibibazo hamwe nimbibi za radiyo , amatsinda yinjiza akeneye urwego .has-validationrwinyongera.

Birasa neza!
Birasa neza!
@
Nyamuneka hitamo izina ukoresha.
Nyamuneka tanga umujyi wemewe.
Nyamuneka hitamo leta yemewe.
Nyamuneka tanga zipi yemewe.
Ugomba kubyemera mbere yo gutanga.
html
<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>

Ibintu bishyigikiwe

Imisusire yo kwemeza irahari kuburyo bukurikira bugenzura nibigize:

  • <input>s na <textarea>s hamwe .form-control(harimo kugeza kuri imwe .form-controlmumatsinda yinjiza)
  • <select>s hamwe na.form-select
  • .form-checks
Nyamuneka andika ubutumwa muri textarea.
Urugero inyandiko itemewe
Urugero rwinshi inyandiko itemewe
Urugero rutemewe guhitamo ibitekerezo
Urugero rutemewe rwo gutanga ibitekerezo
html
<form class="was-validated">
  <div class="mb-3">
    <label for="validationTextarea" class="form-label">Textarea</label>
    <textarea class="form-control" 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>

Ibikoresho

Niba imiterere ya fomu ibyemerera, urashobora guhinduranya .{valid|invalid}-feedbackamasomo .{valid|invalid}-tooltipkumasomo kugirango werekane ibitekerezo byemewe muburyo bwanditse. Witondere kugira umubyeyi position: relativekuriwo kugirango uhagarare ibikoresho. Murugero rukurikira, ibyiciro byinkingi byacu bifite ibi, ariko umushinga wawe urashobora gusaba ubundi buryo.

Birasa neza!
Birasa neza!
@
Nyamuneka hitamo izina ryihariye kandi ryemewe.
Nyamuneka tanga umujyi wemewe.
Nyamuneka hitamo leta yemewe.
Nyamuneka tanga zipi yemewe.
html
<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

Ibihinduka

$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.73.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>");

Imvange

Imvange ebyiri zahujwe hamwe, zinyuze muri loop , kugirango tubyare ifishi yo kwemeza ibitekerezo.

@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-control-color {
    @include form-validation-state-selector($state) {
      @if $enable-validation-icons {
        width: add($form-color-width, $input-height-inner);
      }
    }
  }

  .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:not(:focus),
    > .form-select:not(:focus),
    > .form-floating:not(:focus-within) {
      @include form-validation-state-selector($state) {
        @if $state == "valid" {
          z-index: 3;
        } @else if $state == "invalid" {
          z-index: 4;
        }
      }
    }
  }
}

Ikarita

Nibikorwa byo kwemeza ikarita ya Sass kuva _variables.scss. Kurenga cyangwa kwagura ibi kugirango ubyare leta zitandukanye cyangwa izindi.

$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
  )
);

Ikarita $form-validation-statesirashobora kuba ikubiyemo ibintu bitatu bidahwitse kugirango uhishe ibikoresho hamwe nuburyo bwo kwibanda.

Umuzingi

Byakoreshejwe gusubiramo hejuru $form-validation-statesyikarita kugirango tubyare uburyo bwo kwemeza. Ihinduka ryose kurikarita ya Sass yavuzwe haruguru rizagaragarira muri CSS yawe yakusanyije ukoresheje uyu muzingo.

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

Guhitamo

Kwemeza leta birashobora gutegurwa hakoreshejwe Sass hamwe $form-validation-statesnikarita. Iherereye muri _variables.scssdosiye yacu, iyi Sass ikarita nuburyo tubyara ibisanzwe valid/ invalidkwemeza leta. Harimo ikarita yubatswe kugirango ihindure ibara rya buri leta, igishushanyo, ibara ryibikoresho, hamwe nigicucu. Mugihe ntayindi leta ishyigikiwe nabashakisha, abakoresha uburyo bwihariye barashobora kongeramo byoroshye ibitekerezo byoroshye.