تصديق
HTML5 فارم جي تصديق سان توهان جي استعمال ڪندڙن کي قيمتي، قابل عمل موٽ ڏيو، برائوزر ڊفالٽ رويي يا ڪسٽم اسلوب ۽ JavaScript ذريعي.
اهو ڪيئن ڪم ڪري ٿو
ھتي آھي ڪيئن فارم جي تصديق Bootstrap سان ڪم ڪري ٿي:
- HTML فارم جي تصديق CSS جي ٻن pseudo-ڪلاسن ذريعي لاڳو ٿئي ٿي،
:invalid
۽:valid
. اهو لاڳو ٿئي ٿو<input>
،<select>
۽<textarea>
عناصر. - بوٽ اسٽريپ اسڪوپ
:invalid
۽:valid
اسلوب کي پيرن.was-validated
ڪلاس تائين پهچائيندو آهي، عام طور تي<form>
. ٻي صورت ۾، ڪنهن به گهربل فيلڊ کي قيمت جي بغير ڏيکاري ٿو جيئن صفحي جي لوڊ تي غلط. اهو طريقو، توهان چونڊي سگهو ٿا جڏهن انهن کي چالو ڪيو وڃي (عام طور تي فارم جمع ڪرڻ جي ڪوشش ڪئي وئي آهي). - فارم جي ظاهر کي ريٽ ڪرڻ لاء (مثال طور، AJAX استعمال ڪندي متحرڪ فارم جمع ڪرڻ جي صورت ۾)، جمع ڪرڻ کان پوء ٻيهر
.was-validated
ڪلاس کي هٽايو.<form>
- فال بڪ جي طور تي،
.is-invalid
۽.is-valid
ڪلاس استعمال ڪري سگھجن ٿا pseudo-classes جي بدران سرور-سائڊ جي تصديق لاءِ ..was-validated
انهن کي والدين طبقي جي ضرورت ناهي . - سي ايس ايس جي ڪم ۾ رڪاوٽن جي ڪري، اسان (في الحال) طرزن کي لاڳو نٿا ڪري سگھون
<label>
جيڪي DOM ۾ فارم ڪنٽرول کان اڳ اچي وڃن بغير ڪسٽم جاوا اسڪرپٽ جي مدد کان. - سڀ جديد برائوزرس ڪنٽرينٽ validation API جي حمايت ڪن ٿا ، جاوا اسڪرپٽ طريقن جو هڪ سلسلو فارم ڪنٽرول جي تصديق ڪرڻ لاءِ.
- تاثرات جا پيغام شايد برائوزر ڊفالٽ استعمال ڪري سگھن ٿا (هر برائوزر لاءِ مختلف، ۽ CSS ذريعي اڻ سڌريل) يا اضافي HTML ۽ CSS سان گڏ اسان جي حسب ضرورت موٽ واري انداز کي.
- توھان جاوا اسڪرپٽ ۾ حسب ضرورت صحيح پيغام مهيا ڪري سگھو ٿا
setCustomValidity
.
انهي کي ذهن ۾ رکڻ سان، اسان جي ڪسٽم فارم جي تصديق واري انداز، اختياري سرور-سائڊ ڪلاس، ۽ برائوزر ڊفالٽ لاء هيٺ ڏنل ڊيمن تي غور ڪريو.
ڪسٽم اسلوب
ڪسٽم بوٽ اسٽريپ فارم جي تصديق واري پيغامن لاءِ، توهان novalidate
کي پنهنجي <form>
. هي برائوزر ڊفالٽ موٽڻ واري ٽول ٽائپس کي غير فعال ڪري ٿو، پر اڃا به JavaScript ۾ فارم جي تصديق APIs تائين رسائي فراهم ڪري ٿو. ھيٺ ڏنل فارم جمع ڪرڻ جي ڪوشش ڪريو؛ اسان جو جاوا اسڪرپٽ جمع ڪرائڻ واري بٽڻ کي روڪيندو ۽ راءِ ڏينداسين. جڏهن جمع ڪرڻ جي ڪوشش ڪئي ويندي، توهان ڏسندا :invalid
۽ :valid
طرزون توهان جي فارم ڪنٽرولن تي لاڳو ٿينديون.
ڪسٽم راءِ جا انداز ڪسٽم رنگ، بارڊر، فوڪس اسلوب، ۽ پس منظر جي آئڪن کي بهتر موٽ ڏيڻ لاءِ لاڳو ڪندا آهن. s لاءِ پس منظر جون نشانيون <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)
})
})()
برائوزر ڊفالٽ
مرضي مطابق تصديق جي موٽ واري پيغامن ۾ يا فارم جي رويي کي تبديل ڪرڻ لاءِ جاوا اسڪرپٽ لکڻ ۾ دلچسپي نه آهي؟ تمام سٺو، توهان برائوزر ڊفالٽ استعمال ڪري سگهو ٿا. ھيٺ ڏنل فارم جمع ڪرڻ جي ڪوشش ڪريو. توهان جي برائوزر ۽ OS تي منحصر ڪري، توهان کي راءِ جو ٿورو مختلف انداز نظر ايندو.
جڏهن ته اهي تاثرات جا انداز CSS سان انداز نٿا ڪري سگهجن، توهان اڃا به JavaScript ذريعي راءِ جي متن کي ترتيب ڏئي سگهو ٿا.
<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>");
ملائيندڙ
اسان جي فارم جي تصديق جي موٽ واري انداز کي پيدا ڪرڻ لاءِ، اسان جي لوپ ذريعي، ٻه ميلاپ گڏ ڪيا ويا آهن .
@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 نقشي ۾ ڪا به تبديلي هن لوپ ذريعي توهان جي مرتب ڪيل CSS ۾ ظاهر ٿيندي.
@each $state, $data in $form-validation-states {
@include form-validation-state($state, $data...);
}
ترتيب ڏيڻ
$form-validation-states
تصديق واري رياستون نقشي سان ساس ذريعي ترتيب ڏئي سگھجن ٿيون . اسان جي فائل ۾ واقع آهي _variables.scss
، هي ساس نقشو اهو آهي ته اسان ڪيئن ٺاهيندا آهيون ڊفالٽ valid
/ invalid
تصديق واري رياستون. شامل ڪيو ويو آھي ھڪڙي نيسٽ ٿيل نقشو ترتيب ڏيڻ لاءِ ھر رياست جي رنگ، آئڪن، ٽول ٽائپ رنگ، ۽ فوڪس شيڊ. جڏهن ته ٻيون رياستون برائوزرن جي مدد سان نه آهن، جيڪي ڪسٽم اسلوب استعمال ڪندي آساني سان وڌيڪ پيچيده فارم موٽ شامل ڪري سگهن ٿيون.