<input> kabi formalar va boshqaruv elementlari koâplab maxsus xossalar va hodisalarga ega.
Ularni oârgansak, formalar bilan ishlash ancha qulayroq boâladi.
Navigatsiya: forma va elementlar
Hujjat formalari maxsus document.forms kolleksiyasining aâzolaridir.
Bu ânomlangan kolleksiyaâ deb ataladi: u ham nomlangan, ham tartibli. Formani olish uchun hujjatdagi nom yoki raqamdan foydalanishimiz mumkin.
document.forms.my; // name="my" ga ega forma
document.forms[0]; // hujjatdagi birinchi forma
Formaga ega boâlganimizda, har qanday element form.elements nomlangan kolleksiyasida mavjud.
Masalan:
<form name="my">
<input name="one" value="1">
<input name="two" value="2">
</form>
<script>
// formani olish
let form = document.forms.my; // <form name="my"> elementi
// elementni olish
let elem = form.elements.one; // <input name="one"> elementi
alert(elem.value); // 1
</script>
Bir xil nomga ega bir nechta elementlar boâlishi mumkin. Bu radio tugmalar va checkbox lar uchun odatiy holdir.
Bunday holda, form.elements[name] kolleksiya hisoblanadi. Masalan:
<form>
<input type="radio" name="age" value="10">
<input type="radio" name="age" value="20">
</form>
<script>
let form = document.forms[0];
let ageElems = form.elements.age;
alert(ageElems[0]); // [object HTMLInputElement]
</script>
Bu navigatsiya xossalari teg tuzilishiga bogâliq emas. Barcha boshqaruv elementlari, formada qanchalik chuqur joylashgan boâlishidan qatâi nazar, form.elements da mavjud.
Forma ichida bir yoki bir nechta <fieldset> elementiga ega boâlishi mumkin. Ularda ham ular ichidagi forma boshqaruvlarini roâyxatga oluvchi elements xossasi mavjud.
Masalan:
<body>
<form id="form">
<fieldset name="userFields">
<legend>ma'lumot</legend>
<input name="login" type="text">
</fieldset>
</form>
<script>
alert(form.elements.login); // <input name="login">
let fieldset = form.elements.userFields;
alert(fieldset); // HTMLFieldSetElement
// biz input ni ham formadan, ham fieldset dan nom bo'yicha olishimiz mumkin
alert(fieldset.elements.login == form.elements.login); // true
</script>
</body>
form.nameQisqaroq yozuv mavjud: biz elementga form[index/name] sifatida kirishimiz mumkin.
Boshqacha qilib aytganda, form.elements.login oârniga form.login yozishimiz mumkin.
Bu ham ishlaydi, lekin kichik muammo bor: agar biz elementga kirsak va keyin uning name ini oâzgartirsak, u hali ham eski nom ostida mavjud boâladi (yangi nom ostida ham).
Buni misolda osongina koârish mumkin:
<form id="form">
<input name="login">
</form>
<script>
alert(form.elements.login == form.login); // true, bir xil <input>
form.login.name = "username"; // input nomini o'zgartirish
// form.elements nomni yangiladi:
alert(form.elements.login); // undefined
alert(form.elements.username); // input
// forma ikkala nomga ham ruxsat beradi: yangi va eski
alert(form.username == form.login); // true
</script>
Bu odatda muammo emas, chunki biz forma elementlarining nomlarini kamdan-kam oâzgartiramiz.
Teskari havola: element.form
Har qanday element uchun forma element.form sifatida mavjud. Demak, forma barcha elementlarga havola qiladi va elementlar formaga havola qiladi.
Mana rasm:
Masalan:
<form id="form">
<input type="text" name="login">
</form>
<script>
// forma -> element
let login = form.login;
// element -> forma
alert(login.form); // HTMLFormElement
</script>
Forma elementlari
Forma boshqaruvlari haqida gaplashaylik.
input va textarea
Biz ularning qiymatiga input.value (string) yoki checkbox lar uchun input.checked (boolean) sifatida kirishimiz mumkin.
Mana bunday:
input.value = "Yangi qiymat";
textarea.value = "Yangi matn";
input.checked = true; // checkbox yoki radio tugma uchun
textarea.innerHTML emas, textarea.value dan foydalaningDiqqat qiling, <textarea>...</textarea> oâz qiymatini ichki HTML sifatida saqlasa ham, unga kirish uchun hech qachon textarea.innerHTML dan foydalanmasligimiz kerak.
U faqat dastlab sahifada boâlgan HTML ni saqlaydi, joriy qiymatni emas.
select va option
<select> elementi 3 ta muhim xossaga ega:
select.optionsâ<option>kichik elementlarining kolleksiyasi,select.valueâ hozirda tanlangan<option>ning qiymati,select.selectedIndexâ hozirda tanlangan<option>ning raqami.
Ular <select> uchun qiymat oârnatishning uchta turli usulini beradi:
- Tegishli
<option>elementini toping (masalan,select.optionsorasida) va uningoption.selectednitruega oârnating. - Agar yangi qiymatni bilsak:
select.valueni yangi qiymatga oârnating. - Agar yangi option raqamini bilsak:
select.selectedIndexni oâsha raqamga oârnating.
Mana uchala usulning misoli:
<select id="select">
<option value="apple">Olma</option>
<option value="pear">Nok</option>
<option value="banana">Banan</option>
</select>
<script>
// uchala qator ham bir xil ishni qiladi
select.options[2].selected = true;
select.selectedIndex = 2;
select.value = 'banana';
// diqqat: optionlar noldan boshlanadi, shuning uchun 2-indeks 3-option ni anglatadi.
</script>
Koâpgina boshqa boshqaruvlardan farqli oâlaroq, <select> agar multiple atributiga ega boâlsa, bir vaqtda bir nechta optionni tanlash imkonini beradi. Garchi bu atribut kamdan-kam ishlatiladi.
Koâplab tanlangan qiymatlar uchun qiymatlarni oârnatishning birinchi usulidan foydalaning: <option> kichik elementlaridan selected xossasini qoâshing/olib tashlang.
Mana multi-select dan tanlangan qiymatlarni qanday olish misoli:
<select id="select" multiple>
<option value="blues" selected>Blues</option>
<option value="rock" selected>Rock</option>
<option value="classic">Klassik</option>
</select>
<script>
// multi-select dan barcha tanlangan qiymatlarni olish
let selected = Array.from(select.options)
.filter(option => option.selected)
.map(option => option.value);
alert(selected); // blues,rock
</script>
<select> elementining toâliq spetsifikatsiyasi https://html.spec.whatwg.org/multipage/forms.html#the-select-element spetsifikatsiyasida mavjud.
new Option
Spetsifikatsiyada <option> elementini yaratish uchun yaxshi qisqa sintaksis mavjud:
option = new Option(text, value, defaultSelected, selected);
Bu sintaksis ixtiyoriy. Biz document.createElement('option') dan foydalanishimiz va atributlarni qoâlda oârnatishimiz mumkin. Shunga qaramay, u qisqaroq boâlishi mumkin, shuning uchun mana parametrlar:
textâ option ichidagi matn,valueâ option qiymati,defaultSelectedâ agartrueboâlsa,selectedHTML-atributi yaratiladi,selectedâ agartrueboâlsa, option tanlangan.
defaultSelected va selected orasidagi farq shundaki, defaultSelected HTML-atributni oârnatadi (uni option.getAttribute('selected') dan foydalanib olishimiz mumkin), selected esa option tanlanganligini yoki tanlanmaganligini belgilaydi.
Amalda, odatda ikkala qiymatni ham true yoki false ga oârnatish kerak. (Yoki, shunchaki ularni oâtkazib yuborish; ikkalasi ham standart ravishda false.)
Masalan, mana yangi âtanlanmaganâ option:
let option = new Option("Matn", "qiymat");
// <option value="qiymat">Matn</option> yaratadi
Xuddi shu option, lekin tanlangan:
let option = new Option("Matn", "qiymat", true, true);
Option elementlari xossalarga ega:
option.selected- Option tanlanganmi.
option.index- Oâz
<select>idagi boshqalar orasida optionning raqami. option.text- Optionning matn mazmuni (tashrif buyuruvchi tomonidan koâriladi).
Havolalar
- Spetsifikatsiya: https://html.spec.whatwg.org/multipage/forms.html.
Xulosa
Forma navigatsiyasi:
document.forms- Forma
document.forms[name/index]sifatida mavjud. form.elements- Forma elementlari
form.elements[name/index]sifatida mavjud yoki shunchakiform[name/index]dan foydalanish mumkin.elementsxossasi<fieldset>uchun ham ishlaydi. element.form- Elementlar oâz formasiga
formxossasida havola qiladi.
Qiymat input.value, textarea.value, select.value va h.k. sifatida mavjud. (Checkbox va radio tugmalar uchun qiymat tanlanganligini aniqlash uchun input.checked dan foydalaning.)
<select> uchun qiymatni select.selectedIndex indeksi orqali yoki select.options optionlar kolleksiyasi orqali ham olish mumkin.
Bular formalar bilan ishlashni boshlash uchun asoslar. Darslikda keyinroq koâplab misollarni uchratamiz.
Keyingi bobda biz har qanday elementda sodir boâlishi mumkin boâlgan, lekin asosan formalarda qayta ishlanadigan focus va blur hodisalarini koârib chiqamiz.
Izohlar
<code>yorlig'ini ishlating, bir nechta satrlar uchun - ularni<pre>yorlig'i bilan o'rab qo'ying, 10 satrdan ortiq bo'lsa - sandbox (plnkr, jsbin, codepenâ¦)