ማረጋገጫ
በ HTML5 ቅጽ ማረጋገጫ፣ በአሳሽ ነባሪ ባህሪያት ወይም በብጁ ቅጦች እና ጃቫስክሪፕት ለተጠቃሚዎችዎ ጠቃሚ፣ ተግባራዊ ምላሽ ይስጡ።
እንዴት እንደሚሰራ
የቅጽ ማረጋገጫ ከBootstrap ጋር እንዴት እንደሚሰራ እነሆ፡-
- የኤችቲኤምኤል ቅጽ ማረጋገጫ በ CSS ሁለት አስመሳይ ክፍሎች በኩል ይተገበራል፣
:invalid
እና:valid
. የሚመለከተው በ<input>
፣<select>
እና<textarea>
አባሎች ላይ ነው። - ቡትስትራፕ የወላጅ ክፍልን
:invalid
እና ቅጦችን ይሸፍናል፣ ብዙውን ጊዜ በ . ያለበለዚያ፣ ዋጋ የሌለው ማንኛውም አስፈላጊ መስክ በገጽ ጭነት ላይ ልክ ያልሆነ ሆኖ ይታያል። በዚህ መንገድ እነሱን መቼ እንደሚያነቃቁ መምረጥ ይችላሉ (በተለምዶ ቅጹን ለማስገባት ከተሞከረ በኋላ)።:valid
.was-validated
<form>
- የቅጹን ገጽታ እንደገና ለማስጀመር (ለምሳሌ AJAX ን በመጠቀም በተለዋዋጭ ቅፅ ማስረከቢያ) ፣ ካስረከቡ በኋላ
.was-validated
ክፍሉን<form>
እንደገና ያስወግዱት። - እንደ ውድቀት፣
.is-invalid
እና ክፍሎች ከአገልጋይ ጎን ማረጋገጫ.is-valid
ከሐሰት-ክፍሎች ይልቅ ጥቅም ላይ ሊውሉ ይችላሉ ። የወላጅ ክፍል አያስፈልጋቸውም ።.was-validated
<label>
በሲኤስኤስ አሰራር ላይ ባሉ ገደቦች ምክንያት በብጁ ጃቫ ስክሪፕት ሳይታገዝ በDOM ውስጥ ከቅጽ ቁጥጥር በፊት የሚመጣውን ቅጦች (በአሁኑ ጊዜ) መተግበር አንችልም ።- ሁሉም ዘመናዊ አሳሾች የቅጽ መቆጣጠሪያዎችን ለማረጋገጥ ተከታታይ የጃቫ ስክሪፕት ዘዴዎችን የገደብ ማረጋገጫውን ይደግፋሉ ።
- የግብረመልስ መልእክቶች የአሳሹን ነባሪዎች (ለእያንዳንዱ አሳሽ የተለየ እና በ CSS በኩል የማይሰራ) ወይም የእኛን ብጁ የግብረመልስ ስልቶች ከተጨማሪ HTML እና CSS ጋር ሊጠቀሙ ይችላሉ።
- ብጁ ተቀባይነት ያላቸው መልዕክቶችን
setCustomValidity
በጃቫ ስክሪፕት ማቅረብ ይችላሉ።
ያንን በአእምሯችን ይዘን፣ ለብጁ የቅጽ ማረጋገጫ ስልቶቻችን፣ አማራጭ የአገልጋይ ክፍል ክፍሎች እና የአሳሽ ነባሪዎች የሚከተሉትን ማሳያዎች አስቡባቸው።
ብጁ ቅጦች
ለብጁ የ Bootstrap ቅጽ ማረጋገጫ መልእክቶች novalidate
የቦሊያንን ባህሪ ወደ እርስዎ ማከል ያስፈልግዎታል <form>
። ይህ የአሳሹን ነባሪ የግብረመልስ መሳሪያ ምክሮችን ያሰናክላል፣ነገር ግን አሁንም በጃቫስክሪፕት የቅጽ ማረጋገጫ ኤፒአይዎችን መዳረሻ ይሰጣል። ከታች ያለውን ቅጽ ለማስገባት ይሞክሩ; የእኛ ጃቫ ስክሪፕት የማስረከቢያ አዝራሩን ያጠለፈ እና ግብረመልስ ያቀርብልዎታል። ለማስገባት ሲሞክሩ በቅጽ መቆጣጠሪያዎችዎ ላይ የተተገበሩትን :invalid
እና ቅጦችን ያያሉ ።:valid
ብጁ የግብረመልስ ቅጦች ግብረመልስን በተሻለ መልኩ ለማስተላለፍ ብጁ ቀለሞችን፣ ድንበሮችን፣ የትኩረት ቅጦችን እና የበስተጀርባ አዶዎችን ይተገበራሉ። የበስተጀርባ አዶዎች ለ <select>
ዎች ብቻ ይገኛሉ .form-select
፣ ግን አይደሉም .form-control
።
<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)
})
})()
የአሳሽ ነባሪዎች
የቅጽ ባህሪያትን ለመለወጥ ብጁ የማረጋገጫ ግብረመልስ መልዕክቶችን ወይም ጃቫ ስክሪፕትን ለመጻፍ ፍላጎት የለዎትም? ሁሉም ጥሩ, የአሳሽ ነባሪዎችን መጠቀም ይችላሉ. ከታች ያለውን ቅጽ ለማስገባት ይሞክሩ። በአሳሽዎ እና በስርዓተ ክወናዎ ላይ በመመስረት ትንሽ የተለየ የአስተያየት ዘይቤ ያያሉ።
እነዚህ የአስተያየት ስልቶች በሲኤስኤስ ሊቀረጹ ባይችሉም፣ አሁንም በጃቫስክሪፕት የአስተያየት ጽሑፉን ማበጀት ይችላሉ።
<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>
የአገልጋይ ጎን
የደንበኛ-ጎን ማረጋገጫን እንዲጠቀሙ እንመክራለን፣ ነገር ግን የአገልጋይ ወገን ማረጋገጫ ከፈለጉ፣ ልክ ያልሆኑ እና ትክክለኛ የሆኑ የቅጽ መስኮችን በ .is-invalid
እና .is-valid
. .invalid-feedback
በእነዚህ ክፍሎችም የሚደገፍ መሆኑን ልብ ይበሉ ።
ልክ ላልሆኑ መስኮች፣ ልክ ያልሆነው የግብረመልስ/የስህተት መልዕክቱ ከተገቢው የቅጽ መስክ ጋር መገናኘቱን ያረጋግጡ aria-describedby
(ይህ አይነታ ከአንድ በላይ እንዲጣቀስ የሚፈቅድ መሆኑን በመጥቀስ id
፣ መስኩ አስቀድሞ ተጨማሪ የቅጽ ጽሑፍን የሚያመለክት ከሆነ)።
ከድንበር ራዲየስ ጋር ያሉ ችግሮችን ለማስተካከል የግቤት ቡድኖች ተጨማሪ .has-validation
ክፍል ያስፈልጋቸዋል።
<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>
የሚደገፉ አካላት
የማረጋገጫ ቅጦች ለሚከተሉት የቅጽ መቆጣጠሪያዎች እና አካላት ይገኛሉ፡-
<input>
s እና<textarea>
s ጋር ( በግቤት ቡድኖች ውስጥ.form-control
እስከ አንድ ጨምሮ ).form-control
<select>
ጋር.form-select
.form-check
ኤስ
<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>
የመሳሪያ ምክሮች
የቅጽ አቀማመጥህ የሚፈቅድ ከሆነ የማረጋገጫ ግብረመልስን በቅጥ በተዘጋጀ የመሳሪያ ጥቆማ ለማሳየት ክፍሎቹን ለክፍሎች .{valid|invalid}-feedback
መለዋወጥ ትችላለህ። ለመሳሪያ ምክር አቀማመጥ በእሱ ላይ .{valid|invalid}-tooltip
ወላጅ እንዳለዎት እርግጠኛ ይሁኑ ። position: relative
ከዚህ በታች ባለው ምሳሌ ውስጥ የእኛ የአምድ ክፍሎች ይህ ቀድሞውኑ አላቸው ፣ ግን የእርስዎ ፕሮጀክት አማራጭ ማዋቀር ሊፈልግ ይችላል።
<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>
ሳስ
ተለዋዋጮች
$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>");
ቅልቅል
በቅጽ የማረጋገጫ ግብረመልስ ቅጦችን ለመፍጠር ሁለት ድብልቆች በአንድ ላይ ተጣምረዋል፣በእኛ loop በኩል።
@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;
}
}
}
}
}
ካርታ
ይህ የ Sass ካርታ ማረጋገጫው ከ ነው _variables.scss
። የተለያዩ ወይም ተጨማሪ ግዛቶችን ለመፍጠር ይህንን ይሽሩት ወይም ያራዝሙ።
$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
)
);
የካርታ ካርታዎች $form-validation-states
የመሳሪያ ምክሮችን እና የትኩረት ቅጦችን ለመሻር ሶስት አማራጭ መለኪያዎችን ሊይዝ ይችላል።
ሉፕ
$form-validation-states
የማረጋገጫ ስልቶቻችንን ለመፍጠር በካርታ ዋጋዎች ላይ ለመድገም ይጠቅማል ። ከላይ ባለው የ Sass ካርታ ላይ የተደረጉ ማሻሻያዎች በዚህ loop በኩል በተጠናቀረዎት CSS ውስጥ ይንጸባረቃሉ።
@each $state, $data in $form-validation-states {
@include form-validation-state($state, $data...);
}
ማበጀት
$form-validation-states
የማረጋገጫ ግዛቶች በካርታው በ Sass በኩል ሊበጁ ይችላሉ ። በእኛ _variables.scss
ፋይል ውስጥ የሚገኘው ይህ የሳስ ካርታ ነባሪውን valid
/ invalid
የማረጋገጫ ሁኔታዎችን የምናመነጭበት መንገድ ነው። የእያንዳንዱን ግዛት ቀለም፣ አዶ፣ የመሳሪያ ጫፍ ቀለም እና የትኩረት ጥላ ለማበጀት የተከማቸ ካርታ ተካትቷል። ምንም ሌሎች ግዛቶች በአሳሾች የማይደገፉ ቢሆኑም፣ ብጁ ቅጦችን የሚጠቀሙ በቀላሉ የበለጠ የተወሳሰበ የቅጽ ግብረመልስ ማከል ይችላሉ።