Formlar ve kontrol elemanları, <input> gibi, birçok özel iÅleme ve özelliklere sahiptir.
From elemanlarını öÄrendiÄimizde, formlarla çalıÅmak çok daha kolay olacaktır.
Navigasyon: form ve elemanları
Form dökümanları özel bir dizi olan document.forms üyleridir.
Bu, âadlandırılmıŠkoleksiyonâ olarak adlandırılan bir durumdur: hem isimlendirilmiÅ hem de sıralanmıÅtır. Belgede forma ulaÅmak için hem adı hem de numarasını kullanabiliriz.
document.forms.my; // "my" isimli form
document.forms[0]; // döküman içindeki ilk form
Yeni bir form oluÅturulduÄunda içerisindeki bütün elemanlar form.elements isimli adlandırılmıŠkoleksiyonda eriÅilebilir haldedir.
ÃrneÄin:
<form name="my">
<input name="one" value="1" />
<input name="two" value="2" />
</form>
<script>
// forma ulaÅmak için
let form = document.forms.my; // <form name="my"> form elemanı
// form elemanına ulaÅmak için
let elem = form.elements.one; // <input name="one"> input elemanı
alert(elem.value); // 1
</script>
Formlarda aynı isme sahip birden fazla eleman olabilir. Böyle bir durumla daha çok radyo tipindeki input elemanlarında karÅılaÅırız.
Bu durumda form.elements[name] bir koleksiyon döner, örneÄin:
<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].value); // 10, ilk input deÄeri
</script>
Bu navigasyon özellikleri etiket yapılarına baÄlı deÄildir. Bütün elemanlar, formun neresinde olursa olsun, form.elements koleksiyonu içerisinde bulunur.
Bir form bir veya birden fazla <fieldset> elemanına sahip olabilir. Bunlar ayrıca elements özelliklerine sahiptirler.
ÃrneÄin:
<body>
<form id="form">
<fieldset name="userFields">
<legend>info</legend>
<input name="login" type="text">
</fieldset>
</form>
<script>
alert(form.elements.login); // <input name="login">
let fieldset = form.elements.userFields;
alert(fieldset); // HTMLFieldSetElement
// input elemanına hem form hemde fieldset kullanarak ulaÅabiliriz.
alert(fieldset.elements.login == form.elements.login); // doÄru
</script>
</body>
form.nameDaha kısa bir gösterim mevcut: form[index/name] ile bu elamana ulaÅabiliriz.
form.elements.login yerine form.login yazabiliriz.
Bu da çalıÅır fakat, burada ufak bir problem var:eÄer bir elamana eriÅirsek ve daha sonra ismini(name) deÄiÅtirirsek bu eleman eski ismiyle hala eriÅilebilir durumdadır.(aynı zamanda yeni ismiylede eriÅeliebilir).
AÅaÄıdaki örnekte bunu kolaylıkla görebiliriz:
<form id="form">
<input name="login" />
</form>
<script>
alert(form.elements.login == form.login); // doÄru, aynı <input>
form.login.name = "username"; // input'un ismini deÄiÅtir
// form.elements isim etiketini güncelledi:
alert(form.elements.login); // tanımsız
alert(form.elements.username); // input
// doÄrudan eriÅim için iki isimde kullanılabilir: yeni isim ve eski isim
alert(form.username == form.login); // doÄru
</script>
Bu durum genelde bir sorun oluÅturmaz çünkü, form elemanların ismini hemen hemen hiç deÄiÅtirmeyiz.
Geriye referans: element.form
Herhangi bir eleman için form, element.form olarak eriÅilebilir. Bu sayede bir form, tüm elemanlara referans eder ve elemanlar da forma referans eder.
Konuyu görselleÅtirmek için bir resim:
ÃrneÄin:
<form id="form">
<input type="text" name="login">
</form>
<script>
// form -> eleman
let login = form.login;
// eleman -> form
alert(login.form); // HTMLFormElement
</script>
Form elemanları
Birazda form kontrol elemanlarından bahsedelim, özelliklerine dikkat etmelisin.
input ve textarea
Tipi checkbox olan elemanların deÄerlerine input.value (metin tipinde) veya input.checked (mantıksal tipde) ulaÅılabilir.
Bunun gibi:
input.value = "Yeni deÄer";
textarea.value = "Yeni metin";
input.checked = true; // checkbox veya radio button tipleri için
textarea.innerHTML yerine textarea.value kullanmalısınLütfen Åunu unutma, içeriÄini iç içe geçmiÅ HTML olarak saklasa da, asla textarea.innerHTML kullanmamalıyız. Bu sadece sayfa ilk yüklendiÄinde olan HTMLâi saklar, mevcut deÄeri deÄil.
select ve option
A <select> 3 önemli özelliÄi vardır:
select.optionsâ<option>elemanlarından oluÅan bir dizi,select.valueâ halihazırda seçilmiÅ olan seçeneÄin deÄeri,select.selectedIndexâ halihazırda seçilmiÅ olan seçeneÄin dizin numarası.
<select> elemanınına deÄer atamak için üç farklı yol mevcut:
- Gerekli olan
<option>seçeneÄini bul veoption.selecteddeÄerinitrueolarak ayarla. select.valuedeÄerine deÄiÅken deÄeri ata.select.selectedIndexdeÄerine, seçeneÄin dizin numarasını yaz.
İlk seçenek en bariz olan fakat (2) ve (3) daha uygun.
İÅte bir örnek:
<select id="select">
<option value="apple">Apple</option>
<option value="pear">Pear</option>
<option value="banana">Banana</option>
</select>
<script>
// üç satırda aynı iÅi yapıyor
select.options[2].selected = true;
select.selectedIndex = 2;
select.value = 'banana';
</script>
DiÄer çoÄu kontrolün aksine,
Åu Åekilde:
<select id="select" multiple>
<option value="blues" selected>Blues</option>
<option value="rock" selected>Rock</option>
<option value="classic">Classic</option>
</select>
<script>
// multi-select ile seçilmiÅ bütün seçeknelere ulaÅma
let selected = Array.from(select.options)
.filter(option => option.selected)
.map(option => option.value);
alert(selected); // blues,rock
</script>
Daha detaylı bilgi edinmek için: https://html.spec.whatwg.org/multipage/forms.html#the-select-element sayfasını ziyaret edin.
new Option (yeni Seçenek)
Bu yöntem çoÄu zaman tek baÅına kullanılmaz fakat bahsedilmesi gereken bir durum var.
Seçenek elemanı dökümantasyonunda <option> oluÅturmak için kısa ve hoÅ bir notasyon mevcut:
option = new Option(text, value, defaultSelected, selected);
DeÄiÅkenler:
textâ seçenek içindeki metin,valueâ seçeneÄin deÄeri,defaultSelectedâ eÄertrue, iseselectedHTML-attribute oluÅturulur,selectedâ eÄertrue, ise, seçenek iÅaretlenir.
ÃrneÄin:
let option = new Option("Text", "value");
// <option value="value">Text</option> oluÅturur
Aynı eleman seçildi:
let option = new Option("Text", "value", true, true);
<option> ek özellikleriSeçenek elemanlarının ek özellikleri vardır:
selected- seçenek seçildi mi.
index<select>seçeneklerinin dizin numarası.text- Seçenekte belirtilen metin (kullanıcı tarafından görülür).
Ãzet
From navigasyonu:
document.forms- Form
document.forms[name/index]olarak mevcuttur⦠form.elements- Form elemanlarına
form.elements[name/index]kullanarak ulaÅılabilir yada orform[name/index]kullanılarak ulaÅılabilir.elementsözelliÄi<fieldset>için de çalıÅır.
element.form
:Elemanlar, form özelliÄinde kendi formlarına referans yaparlar.
DeÄerlere input.value, textarea.value, select.value v.b., yada input.checked kullanarak checkbox ve radio buttons tipindeki inputâlar için ulaÅılabilir.
Bu bilgiler formlar ile çalıÅmak için temel bilgiler.EÄitimin ilerleyen bölümlerinde birçok örnekle karÅılaÅacaÄız. Bir sonraki bölümde, herhangi bir öÄe üzerinde oluÅabilecek, ancak çoÄunlukla formlar üzerinde iÅlenen focus ve blur olaylarını ele alacaÄız.
Yorumlar
<code>kullanınız, birkaç satır eklemek için ise<pre>kullanın. EÄer 10 satırdan fazla kod ekleyecekseniz plnkr kullanabilirsiniz)