HTML formalari bilan ishlash, form.elements to'plami, to'liq yuborish oqimi, Client-side vs Server-side validatsiya, real-time tekshiruv va xatoliklarni ro'yxatlash.
Bu bobda formalar bilan ishlash va foydalanuvchi kiritgan ma'lumotni tekshirish (validatsiya)ni chuqur o'rganamiz — bu deyarli har qanday veb-loyihada zarur bo'ladigan amaliy ko'nikma.
Forma ichidagi elementlarga (input, select, textarea) turli usullar bilan kirish mumkin.
index.htmlHTML<form id="loginForm"><input type="text" id="username" name="username"><input type="password" id="password" name="password"><button type="submit">Kirish</button></form>
script.jsJavaScriptlet form = document.getElementById("loginForm");// Usul 1 — alohida ID orqalilet username = document.getElementById("username").value;// Usul 2 — forma orqali, name atributi bilanlet username2 = form.elements["username"].value;
💡 Key Idea
form.elements — forma ichidagi barcha inputlarga, ularning name atributi orqali kirish imkonini beradi. Bu usul ayniqsa ko'p inputli katta formalarda qulay.
index.htmlHTML<form id="loginForm"><input type="text" id="username" placeholder="Foydalanuvchi nomi"><input type="password" id="password" placeholder="Parol"><button type="submit">Kirish</button></form><p id="message"></p>
script.jsJavaScriptlet form = document.getElementById("loginForm");let message = document.getElementById("message");form.addEventListener("submit", function (event) {event.preventDefault(); // Chapter 33'da o'rganganlet username = document.getElementById("username").value;let password = document.getElementById("password").value;if (username === "" || password === "") {message.textContent = "Barcha maydonlarni to'ldiring!";message.style.color = "red";return;}message.textContent = "Muvaffaqiyatli yuborildi!";message.style.color = "green";});
Yaxshi validatsiya odatda bir nechta bosqichda amalga oshiriladi, va har bir bosqich turli maqsadga xizmat qiladi.
| Tur | Qachon ishlaydi | Maqsad |
|---|---|---|
HTML5 built-in (required, type="email") | Brauzer avtomatik | Tez, oddiy tekshiruvlar |
Real-time (input hodisasi) | Foydalanuvchi yozayotganda | Darhol fikr-mulohaza berish |
| On submit | Forma yuborilganda | Yakuniy, to'liq tekshiruv |
| Server-side | Serverga yuborilgandan keyin | Xavfsizlik uchun majburiy |
🔥 Important
Client-side (JavaScript) validatsiya — faqat foydalanuvchi tajribasini yaxshilash uchun. U hech qachon xavfsizlik vositasi sifatida yetarli emas, chunki foydalanuvchi brauzer konsoli orqali JavaScript'ni butunlay chetlab o'tishi mumkin. Server-side validatsiya har doim majburiy.
index.htmlHTML<input type="email" id="email"><span id="emailError"></span>
script.jsJavaScriptlet emailInput = document.getElementById("email");let emailError = document.getElementById("emailError");emailInput.addEventListener("input", function () {let value = emailInput.value;if (value === "") {emailError.textContent = "";} else if (!value.includes("@")) {emailError.textContent = "Email formati noto'g'ri";emailError.style.color = "red";} else {emailError.textContent = "✓ To'g'ri";emailError.style.color = "green";}});
input hodisasi — foydalanuvchi har bir belgi kiritganda ishga tushadi, shuning uchun fikr-mulohaza darhol, foydalanuvchi hali yozayotgan paytda beriladi.
Bir nechta maydonni birgalikda tekshirish uchun, har bir maydon uchun alohida tekshiruv function yozib, ularni umumiy tekshiruvda birlashtirish tavsiya etiladi.
index.htmlHTML<form id="signupForm"><input type="text" id="fullName" placeholder="To'liq ism"><input type="email" id="signupEmail" placeholder="Email"><input type="password" id="signupPassword" placeholder="Parol"><button type="submit">Ro'yxatdan o'tish</button></form><div id="errors"></div>
script.jsJavaScriptfunction validateName(name) {return name.trim().length >= 3;}function validateEmail(email) {return email.includes("@") && email.includes(".");}function validatePassword(password) {return password.length >= 8;}document.getElementById("signupForm").addEventListener("submit", function (event) {event.preventDefault();let name = document.getElementById("fullName").value;let email = document.getElementById("signupEmail").value;let password = document.getElementById("signupPassword").value;let errors = [];if (!validateName(name)) {errors.push("Ism kamida 3 belgidan iborat bo'lishi kerak");}if (!validateEmail(email)) {errors.push("Email formati noto'g'ri");}if (!validatePassword(password)) {errors.push("Parol kamida 8 belgidan iborat bo'lishi kerak");}let errorsDiv = document.getElementById("errors");if (errors.length > 0) {errorsDiv.innerHTML = errors.map(err => `<p style="color: red">${err}</p>`).join("");} else {errorsDiv.innerHTML = `<p style="color: green">Muvaffaqiyatli ro'yxatdan o'tdingiz!</p>`;}});
validateX() function yozilgan — bu kodni tartibli va qayta ishlatiladigan qiladi.errors array'i (Chapter 7) — barcha topilgan xatoliklarni to'playdi.errors.length > 0 — agar kamida bitta xatolik bo'lsa, foydalanuvchiga barcha xatoliklar birdaniga ko'rsatiladi.🔗 Connection
Bu misol Chapter 14'da o'rgangan map() va Chapter 17'dagi template literal'larni birgalikda qo'llagan holda, xatoliklar ro'yxatini chiroyli formatda ko'rsatadi.
Task:
Oddiy forma yarating (name inputi bilan), submit hodisasida preventDefault() chaqirib, agar name bo'sh bo'lsa "Ismni kiriting" xabarini chiqaring.
Required Concepts:
preventDefaultTask:
Parol inputi yarating, input hodisasi orqali real-time tarzda parol uzunligini tekshiring: 8dan kam bo'lsa qizil, aks holda yashil rangda "Kuchli parol" deb ko'rsating.
Required Concepts:
input eventTask:
To'liq "Ro'yxatdan o'tish" formasi yarating: name, email, password, confirmPassword maydonlari bilan. Barcha maydonlarni tekshiring, shu jumladan password === confirmPassword ekanligini ham. Barcha xatoliklarni ro'yxat sifatida ko'rsating.
Required Concepts:
confirmPassword tekshiruvini qo'shing.index.htmlHTML<form id="testForm"><input type="text" id="field"><button type="submit">Yubor</button></form>
script.jsJavaScriptdocument.getElementById("testForm").addEventListener("submit", function (event) {console.log("Submit ishladi");});
Foydalanuvchi tugmani bossa, nima bo'ladi?
🧠 Think first! Javobni ko'rishdan oldin kamida 30 soniya o'ylang.
<details> <summary>Answer</summary> Konsolga "Submit ishladi" chiqadi, lekin shu bilan birga sahifa ham qayta yuklanadi (chunki event.preventDefault() chaqirilmagan).Why?
submit hodisasi ishga tushadi va listener bajariladi, lekin forma yuborilishining standart xatti-harakati (sahifani qayta yuklash) preventDefault() bilan to'xtatilmagani uchun, u ham baravar davom etadi. Agar sahifa tez qayta yuklansa, konsoldagi natijani ko'rishga ham ulgurmasligi mumkin.
Quyidagi kodda muammo bor:
script.jsJavaScriptdocument.getElementById("myForm").addEventListener("submit", function (event) {event.preventDefault();let email = document.getElementById("email").value;if (email.includes("@")) {console.log("Email to'g'ri");}if (email.length < 5) {console.log("Email juda qisqa");}// Ikkala shart ham TRUE bo'lishi mumkin, lekin dasturchi// faqat bittasi ishlashini kutgan});
Your Task:
console.log ham chiqishi mumkinligini tushuntiring.Yechim — agar faqat birinchi mos shart kerak bo'lsa, else if ishlatish kerak:
script.jsJavaScriptif (email.length < 5) {console.log("Email juda qisqa");} else if (email.includes("@")) {console.log("Email to'g'ri");}
Yoki, agar chindan ham har ikkala tekshiruv mustaqil bo'lishi kerak bo'lsa (masalan, ikkalasi ham alohida validatsiya xabari bo'lsa), asl kod to'g'ri — bu holda "muammo" yo'q, faqat mantiqni aniq loyihalash kerak.
</details>getElementById yoki form.elements[name] orqali kirish mumkin.preventDefault() — forma yuborilganda sahifa qayta yuklanishining oldini oladi.event.preventDefault() — formalar bilan ishlashda deyarli har doim kerak.input hodisasi) — foydalanuvchi tajribasini sezilarli yaxshilaydi.script.jsJavaScriptform.addEventListener("submit", function (event) {event.preventDefault();let value = document.getElementById("field").value;if (value.trim() === "") {// xatolik ko'rsatishreturn;}// davom etish});input.addEventListener("input", function (event) {// real-time validatsiya});
Mavzu bo‘yicha tushunchalaringizni interaktiv test orqali sinovdan o‘tkazing va natijalarni bilib oling.
Darslikda o‘rganilgan qoidalarga asosan real kod yozing, testlardan o‘tkazing va yechimlarni mustahkamlang.
Test Sinovi
Hali topshirilmagan (kamida 75% kerak)
Amaliy Masalalar
0 / 3 ta yechildi (kamida 75% kerak)
Dars sifati va mazmunini yaxshilash uchun o‘z haqqoniy bahoingizni qoldiring.
Mavzuni to‘liq o‘zlashtirish uchun test sinovi, amaliy kodlash va bog‘liq darslar
O‘z bilimingizni interaktiv test savollari orqali tekshiring va darhol xatolarni tahlil qiling.
Nazariyani real kod yozish bilan mustahkamlang, avtomatik testlardan o‘ting va XP to‘plang.
Kurs bo‘yicha keyingi va bog‘liq mavzular: