Web sayfalarında kullanıcıdan bilgi almak için konulan yazı alanı, seçenek kutusu, onay kutusu, düğme vs.. bileşenlerden oluşan gruba form denir. Form'daki bilgiler kullanıcı tamam deyince bilgilerin değerlendirilip cevap verileceği servera gönderilir. Bilgilere göre server yeni bir web sayfası oluşturur ve geri gönderir. Kullanıcı form bilgilerini gönderme işini submit düğmesine tıklayarak yapar. Submit düğmesine basıldığında browser formun action özelliğindeki cgi programına (servardaki verileri değerlendirecek program) verileri gönderir. Eğer gönderilmeden önce javascriptte işlemler yapmak istiyorsanız formun onSubmit özelliğini yakalamanız gerekir. Aşağıdaki örnekte form submit edilince(verilerin karşı tarafa gönderilme işlemi başladığında) javascript ile devreye giriyoruz ve bilgilerin gönderilip gönderilmeyeceğine karar veriyoruz. Eğer tel alanı bossa result false oluyor.
1 <html> 2 <head> 3 <script> 4 function check(){
5 result=true//tel alanının boş olup olmadığını kontrol edildi ve sonuc geldi;
6 if(result){
7 return true;
8 }else{
9 return false;
10 }
11 }
12 </script> 13 </head> 14 <body> 15 <form action="test.jsp" onSubmit="return check()"> 16 <input type="text" size="12" name="tel"> 17 <input type="submit" value=" OK "> 18 </form> 19 </body> 20 </html>
onSubmit ile submit olayını yakaladık ve check fonksiyonunu çağırdık. Telefon alanına girilip girilmediğini anladık. Eğer girilmişse result true olur ve true döndürülür ve form verisi gönderilir. Aksi takdirde form verisi gönderilmez
form validator sistemi
Bu projenin temeli AbstractFormValidator nesnesidir. AbstractFormValidator nesnesi bu proje için yapılmıştır. Bu nesneye parametre olarak bir form,control edilecek form elementlerinin adları,ve kontrol ederken çağıracağı fonksiyon verilir. Parametreler verildikten sonra bu nesnenin validate metodu çağrılır. Eğer form yanlış doldurulmuşsa alert ile mesaj basılır ve false döndürülür. Eğer doğru doldurulmuşsa true döndürülür.
AbstractFormValidator en başta kontrol edilecek olan form nesnesini ister. AbstractFormValidator sadece parametre olarak verilen element isimlerini kontrol eder. Böylece yanlızca istediğiniz elementleri kontrol edersiniz. Son olarak bir fonksiyonun adı alınır. AbstractFormValidator elementleri nasıl kontrol ettiğinizi bilmez. Her element için verilen fonksiyonu çağırır. O fonksiyondan hata mesajı gelirse mesajı saklar. Eğer gelen true ise diğer elemente geçer. Bu nesnenin abstract(soyut) olmasının sebebi budur. Kontrol için sizin fonksiyonunuzu kullanır. AbstractFormValidator kodu aşağıda görülmektedir.
Burada FormManager nesnesi kullanılmaktadır. Bu nesne bir form alır ve formla ilgi çok sayıda işlem yapabilir. Bu projeyle doğrudan bir ilişkisi yoktur. Bu nesne her zaman kullanılabilir. FormManager nesnesinin kodunu sayfanın en aşağısında bulabilirsiniz. Burada FormManager'ın hasElement,getElements,getElementNames metodları kullanılmaktadır. hasElement verilen isimde elementin olup olmadığını gönderir. getElements verilen isimdeki elementlerin dizisini gönderir (aynı isimde birden fazla element olabilir ve bu normaldir). getElementNames ise bir formdaki kullanılan tüm element isimlerini gönderir. Eğer tüm elementleri kontrol etmek istiyorsanız control dizisi yerine "ALL" girmelisiniz. getNotFoundElementMessages metodu ise Form.js dosyasındadır. Bu fonksiyon bir element bulunamayınca gösterilecek mesajı verir.
Bir form validator yapmak için AbstractFormValidator'e bir fonksiyon vermek gerekir. aşağıdaki Örnekte kendimiz bir fonksiyon yaratıyor ve AbstractFormValidator'a veriyoruz.
Örnekte form submit edildiğinde checkForm fonksiyonu çağrılmıştır. Orada control edilmek istenen elementlerin isimlerinin dizisi yaratılmıştır. Sonra AbstractFormValidator nesnesi yaratılmıştır. simpleValid AbstractFormValidator'ün her isme karşılık çağıracağı fonksiyondur. Bu fonksiyon SimpleValidator.js dosyasındadır (Kod aşağıda görülüyor). Bu yüzden bu dosya link edilmiştir. Ve daha sonra validatorun validate methodu çağrılıyor ve ondan gelen sonuca göre submit işlemi gerçekleşiyor (veya gerçekleşmiyor). AbstractFormValidator Form.js dosyasındaki kodları kullandığı için Form.js dosyası AbstractFormValidator.js dosyasından önce eklenmelidir. Çünkü AbstractFormValidator.js dosyası onları kullanmaktadır.
AbstractFormValidator sadece istediğiniz element isimleri için sizin fonksiyonunuzu çağırmaktadır. Sadece fonksiyonu değiştirerek çok değişik validatorler yapabilirsiniz. Her yeni validator yaptığınızda form elemanlarını alma, döngü açma, aynı isimdeki elementleri bulmak gibi yüklerle uğraşmazsınınız.
Kodtaki isTextElementOf,hasElementValue,isChecked fonksiyonları Form.js dosyasında bulunmaktadır. getEmptyElementMessages, getNotCheckedElementMessages fonksiyonlarıda Messages.js dosyasındadır. Message.js ile bir element için istediğiniz hata mesajını verebilirsiniz. Messages.js dosyasının kodu aşağıdadır. Bu dosya istenildiği gibi değiştirileblir veya yeni Messages.js yaratılabilir. Tek yapılması gereken bu dosyayı sayfaya link yapmaktır.
function getEmptyElementMessages(elementName){return getLabel(elementName)+" is empty";
}function getNotCheckedElementMessages(elementName){return getLabel(elementName)+" don't be checked";
}function getLabel(key){return key;
}
TypeValidatorModel
Yaptığımız örneklerde her element için tek bir fonksiyon çağırılmaktadır. Ve o fonksiyonu yapan kişi elementin adını ve tipini öğrenir ve ona göre kontrol yaptıktan sonra sonucu geri gönderir. SimpleValidator.js'de simpleValidElement fonksiyonu bir elementi alıyor ve onu tipine göre kontrol ediyor. Eğer text elementse ayrı, seçenek kutusu ve onay kutusu için ayrı kontrol yapmaktadır. Biz bunun yerine her tip için bir fonkisyon çağırsak işi daha basitleştirmiş oluruz. Böylece validatoru yazan kişi sadece her tip için nasıl kontrol edileceğini verir. Böylece gelen elementin tipini anlamak işleminden kurtulunur. Aşağıda TypeValidatorModel.js dosyası görülmektedir. Bunu kullanmak için AbstractFormValidator'a typeValidElement fonksiyonunu vermelisiniz. Böylece AbstractFormValidator bu fonksiyonu çağırır. Bu fonksiyonda elementin tipini bulur ve o tipe uygun fonksiyonu çağırır. Bu fonksiyonu doldurmak sizin görevinizdir.
Şimdi TypeValidatorModel'i kullanarak daha önceki örnekteki SimpleValidator'deki yaptıklarımızı yapalım. aşağıda SimpleTypeValidator.js dosyası görülmektedir.
SimpleTypeValidator'de görüldüğü gibi TypeValidatorModel'de istenilen fonksiyonlar doldurulmuştur. Text alanları (text, password, textarea), seçenek ve onay kutuları kontrol edilmiş, diğerlerinde true gönderilmiştir (kontrol edilmemiştir). isValidText,isValidCheckedElement element yardımcı fonksiyonlardır.
NameValidator
Biz formumuzu elementlerin adlarına göre kontrol etmek isteyelim. yukarıdaki örnek elementin tipine göre senin bir fonksiyonunu çağırmaktadır. Elementin adına göre fonksiyon çağırması için ne yapmamız gerekir. Bir NameValidatorModel yapılmalıdır. Gelen elementin adı bulunur ve valid+(elementinAdı) adında bir fonksiyon çağırılır. Örneğin day adında bir elemente rastlandığında validday() fonksiyonu çağırılacaktır. Aşağıda NameValidatorModel.js görülmektedir.