Web Programlama
Transkript
Web Programlama
Web Programlama JavaScript (3) Döküman Nesne Modeli (1/4) • Document Object Model (DOM) • DOM web tarayıcı tarafından, web sayfası yüklendiğinde otomatik oluşturulan bir organizasyon şemasıdır • Web sayfasında bulunan her eleman (etiketler, metin, resim, tablo, CSS özellikleri vs.) bu organizasyon şemasında bir pozisyona sahiptir • getElementById ve getElementsByTagName, DOM üzerinde değişiklik yapmak için kullanılan iki metotur • İlerleyen slaytlarda DOM’a yeni eleman ekleme ve DOM üzerindeki elemanların taşınması işlemlerinin nasıl yapılacağı gösterilecek Döküman Nesne Modeli (2/4) Döküman Nesne Modeli (3/4) • Web sayfasındaki herşey DOM’a dahil edilir • İlk iki seviye tüm web sayfalarında aynıdır: "document" ve "html" • Bir alt seviyede "head" ve "body" yer alır • "head" ve "body" aynı seviyedeki elemanlardır • Sayfanın asıl içeriği "body" seviyesinin altındaki elemanlardır • Önceki sayfaya bir "div" ve paragraf daha ekleyerek DOM’daki değişiklikleri inceleyelim Döküman Nesne Modeli (4/4) DOM: Üst ve Alt Nodlar DOM: Üst ve Alt Nodlar (1/2) • DOM ağacı üst ve alt nodlardan oluşur • "document" nodu hariç tüm nodların bir üst nodu vardır • "div" nodu "body" üst nodu içerisinde • "p" nodları "div" üst nodu içerisinde • metin nodları ilişkili "p" nodları içerisinde • "html" nodu, "head" ve "body" nodlarının üst nodudur • "body" nodu, "html" nodunun alt nodudur DOM: Üst ve Alt Nodlar (2/2) • Aşağıdaki paragraf için DOM ağacı nasıl olur gözünüzde canlandırın: <p>This is <em>important</em>!</p> • Gözünüzde canlandırdığınız DOM ağacı aşağıdaki ile örtüşüyor mu? DOM Ağacında Nod Aramak (1/6) • Daha önce, getElementById metodunu kullanarak, nodların id’lerini kullanarak arama yapmayı öğrenmiştik var eField = document.getElementById("email"); • Belirli bir tipteki nodun (örnek: <p>) sayfadaki tüm örneklerini, getElementsByTagName metodu ile, bir kolleksiyon halinde almayı da görmüştük var eField = document.getElementsByTagName("p"); DOM Ağacında Nod Aramak (2/6) • Bu kolleksiyondaki paragraflardan bir tanesinin içeriğini ise aşağıdaki gibi değiştirebiliyor veya okuyabiliyorduk var contents = p[2].innerHTML; • Örneğin, yukarıdaki cümle sayfadaki 3. paragrafın içeriğini contents değişkeninin içerisine aktarmakta DOM Ağacında Nod Aramak (3/6) • Önceki slayttaki cümlelerde arama tüm DOM dökümanı üzerinde yapılmaktaydı • Aramayı, belirli bir nodun alt nodları arasında yaparak arama alanını sınırlandırabiliriz • Aşağıdaki örnekte "div3" id’li nod altındaki "p" etiketi aranmakta ve içeriği contents değişkeni içerisine atılmakta var d = document.getElementById("div3"); var p = d.getElementsByTagName("p"); var contents = p[2].innerHTML; DOM Ağacında Nod Aramak (4/6) Yandaki HTML sayfasnda "ny" id’li "div" nodunun altındaki ikinci paragrafı elde etmek için aşağıdaki kod parçası çalıştırılabilir: var div = document.getElementById("ny"); var p = div.getElementsByTagName("p"); var contents = p[1].innerHTML; DOM Ağacında Nod Aramak (5/6) Aynı elemana erişmenin yeni bir yolu (childNodes kullanılarak) yukarıda gösterilmiştir var p = document.childNodes[0].childNodes[1].childNodes[1].childNodes[1]; var contents = p.innerHTML; DOM Ağacında Nod Aramak (6/6) • Önceki örnekte, hedef noda erişim document nodundan başlayarak gerçekleştirilmiştir • Pratikte ise hedef noda erişim daha alt seviyedeki bir noddan başlanarak daha kolay gerçekleştirilebilir var d = document.getElementById("ny"); var p = d.childNodes[1]; var contents = p.innerHTML; Çöp Nodlar ve nodeType (1/4) Çöp Nodlar ve nodeType (2/4) Çöp Nodlar ve nodeType (3/4) • Boşluk karakterleri için eklenen bu ekstra nodlar, farklı web tarayıcılarında aynı hedef nodu bulmayı zorlaştırabilir • Bu durumu çözmek için aradığımız noda id vererek aramayı bu id üzerinden yapabiliriz document.getElementById("p2").innerHTML = "All his men."; • Veya nodeType özelliğini kullanarak aradığımız nodu daha emin bir şekilde bulabiliriz var nType = targetNode.nodeType; Çöp Nodlar ve nodeType (4/4) • Aşağıda nodeType özelliğini ilgili paragrafı bulup değiştiren JavaScript kod parçası bulunmaktadır • Kod parçası "div" nodu altındaki nodları incelemekte, nod tipi 1 olan paragraflardan ikincisini, sayaç kullanarak bulmaktadır Nod Tipleri • nodeType özelliği sadece okunabilirdir, değeri değiştirilemez • nodeType özelliği ilgili nodun tipini bir sayı olarak geri döndürür • • • • Element (element) nodlar için 1 (örnek: <p>, <ul> ...) Özellik (attribute) nodlar için 2 (örnek: href) Metin (text) nodlar için 3 Yorum (comment) nodlar için 8 • Diğer nod tipleri için: http://www.w3schools.com/jsref/prop_node_nodetype.asp firstChild ve lastChild Özellikleri • childNodes kolleksiyonunu kullanarak alt nodlara erişim gösterilmişti var targetNode0 = parentNode.childNodes[0]; var targetNode1 = parentNode.childNodes[1]; • İlk ve son alt nodlara firstChild ve lastChild özellikleri kullanılarak da erişilebilir var targetNode = parentNode.firstChild; var targetNode = parentNode.lastChild; parentNode Özelliği • DOM ağacında yukarı doğru giderek, bir alt nodun üst noduna da parentNode özelliğini kullanarak erişebiliriz • DOM kullanarak yan tarafta gösterilen div nodunun üst noduna nasıl erişilebilir? var kidNode = document.getElementById("div2"); var pNode = kidNode.parentNode; nextSibling ve previousSibling Özellikleri • Bir çocuk nod ile aynı seviyedeki diğer nodları elde etmek için, çocuk nodun nextSibling ve previousSibling özellikleri kullanılabilir • Aşağıdaki "div1" id’li nod ile aynı üst noda sahip bir sonraki nodu elde etmek için kullanılabilir var firstEl = document.getElementById("div1"); secondEl = firstEl.nextSibling; • previousSibling ise aynı seviyede bulunan bir önceki nodu elde etmek için kullanılabilir nodeName Özelliği (1/3) • Bir nodun adını nodeName özelliği ile alabiliriz • Nod adları "P" ve "DIV" gibi string değerlerdir • Aşağıdaki örnekte, hedef noda ait nod adı nName değişkenine aktarılmaktadır var parent = document.getElementById("div1"); var target = parent.firstChild; nName = target.nodeName; nodeName Özelliği (2/3) • Eğer nod bir metin nodu (text node) ise nod adı "#text" olur (çift tırnaksız ve küçük harfle) nodeName Özelliği (3/3) nodeName özelliği zaman zaman "P" yerine "p" veya "IMG" yerine "img" geri döndürebileceğinden, aşağıdaki şekilde küçük harfe çevrilerek kontrol edilmesi daha uygun olacaktır if (targetNode.nodeName.toLowerCase === "img") { nodeValue Özelliği (1/2) • Bir metin nodunun (text node) değeri nodeValue özelliği ile elde edilebilir • Aşağıdaki HTML kod parçası verilmiş olsun <h2>Do <em>not</em> hit!</h2> • Burada H2 elemanının ilk çocuğu bir metin nodudur ve nod değeri "Do" değeridir (çift tırnaksız) nodeValue Özelliği (2/2) • P ve IMG gibi element nodların (element node) değerleri yoktur • Bir element nodun değerini değişken içerisine atmaya çalışırsanız, değişkenin değeri null olacaktır • Örneğin aşağıdaki HTML kod parçasında, em bir element nodudur ve nod değeri bir değişkene atanacak olursa, değişken null değere sahip olacaktır <h2>Do <em>not</em> hit!</h2> nodeValue ve innerHTML Özellikleri (1/2) • Metin nodların nodeValue özelliği ile innerHTML özelliği karıştırılmamalıdır • innerHTML element nodlarının bir özelliğidir. • innerHTML özelliği ile dönen değer tüm alt nodları da içerir (alt elemanlar dahil). nodeValue özelliği ise tek bir metin noduna ait karakterleri döndürür nodeValue ve innerHTML Özellikleri (2/2) • Aşağıdaki örnekte H2 elementinin innerHTML özelliğine karşılık gelen kısım kırmızı olarak gösterilmiştir <h2>Do <em>not</em> hit!</h2> • Aşağıda ise H2 elementinin ilk çocuğuna ait nod değeri (nodeValue) gösterilmektedir <h2>Do <em>not</em> hit!</h2> Elementlerin Sayılması (1/4) • Daha önce getElementsByTagName ve childNodes kullanarak bir element listesi/kolleksiyonu oluşturmayı gördünüz • length özelliğini kullanarak bu kolleksiyonun boyutunu yani kolleksiyon içerisindeki elementlerin sayısını elde edebilirsiniz • getElementsByTagName kullanarak elde edilen kolleksiyonun boyutunu elde etmek için: var liElements = getElementsByTagName("li"); var howManyLi = liElements.length; Elementlerin Sayılması (2/4) • childNodes kullanarak elde edilen kolleksiyonun boyutunu elde etmek için: var parentNode = document.getElementById("d1"); var nodeList = parentNode.childNodes; var howManyKids = nodeList.length; Elementlerin Sayılması (3/4) • Bu kolleksiyonların boyutu kullanılarak pek çok önemli işlem gerçekleştirilebilir • Örneğin, bir sayfadaki tüm <li> elementlerinin üzerinde gezerek içi boş olanların içine geçici bir metin atayan JavaScript kodu aşağıda verilmiştir for (var i = 0; i < howManyLi; i++) { if (liElements[i].innerHTML === "") { liElements[i].innerHTML = "coming soon"; }} Elementlerin Sayılması (4/4) • Aşağıdaki JavaScript kodu ise <div> etiketi altında olan resimlerin sayısını hesaplamaktadır var numberPics = 0; for (var i = 0; i < howManyKids; i++) { if (nodelist[i].nodeName.toLowerCase() === "img") { numberPics++; } } Nod Özellikleri (1/3) HTML elemanlarının özelliklerini hatırlayınız <a href="http://www.amazon.com">Shop</a> <div id="p1"> <p class="special"> <img src="images/slow-loris.png"> <img src="dan.gif" alt="Dan" height="42" width="42"> Nod Özellikleri (2/3) • Belirli bir elementin, belirli bir özelliğe sahip olup olmadığını hasAttribute ile tespit edebiliriz var target = document.getElementById("p1"); var hasClass = target.hasAttribute("class"); • Eğer parametre olarak gönderilen özellik bu element için kullanılmış ise, metoddan true dönecektir. Aksi halde ise false dönecektir Nod Özellikleri (3/3) • Belirli bir elementin, özelliğinin değerini getAttribute ile elde edebiliriz var target = document.getElementById("div1"); var attVal = target.getAttribute("class"); • Bir özelliğin değerini ise setAttribute ile atayabiliriz var target = document.getElementById("div1"); target.setAttribute("class, "special"); <div id="div1" class="special"> Özellik Adları ve Değerleri (1/3) • Bir elementin sahip olduğu özellikleri kolleksiyon halinde elde etmek için attributes özelliği kullanılır var list = document.getElementById("p1").attributes; • Bu kolleksiyonda kaç özellik olduğunu tespit etmek içinse, daha önceki kullanımlarda olduğu gibi, lenght özelliği kullanılır var numOfItems = list.length; Özellik Adları ve Değerleri (2/3) • Veya bu iki özelliğin kullanımı aşağıdaki gibi birleştirilebilir var numOfItems = document.getItemById("p1").attributes.length; • Dizi notasyonu kullanarak, herhangi bir özelliğin adı, nodeName özelliği kullanarak bir değişkenin içine atılabilir var nName = list[2].nodeName; Özellik Adları ve Değerleri (3/3) • Örneğin aşağıdaki HTML kod parçası için nName değişkenine "onMou seover" değeri atanır <p id="p1" class="c1" onMouseover="chgColor();"> • Özelliğin değerini almak içinse nodeValue özelliği kullanılır • Aynı HTML kod parçası için, aşağıdaki kod parçası nValue değişkenine "chgColor();" değerini atayacaktır var nValue = list[2].nodeValue; Nod Eklemek (1/9) • DOM hiyerarşisini kullanarak, bir HTML dökümanın HEAD veya BODY bölümlerinin herhangi bir yerine element, özellik veya metin nodu (text node) eklenebilir • İlerleyen slaytlarda, öncelikle (1) yeni bir paragraf oluşturma, bu paragrafa özellik ekleme ve metin ekleme, ardından (2) bu paragrafı sayfaya ekleme gösterilecektir • Yeni bir nod oluşturmak için document nesnesinin createElement metodu kullanılır Nod Eklemek (2/9) • Aşağıda çeşitli elemanlar oluşturmak için örnekler bulunmaktadır var nodeToAdd = document.createElement("p"); var aNodeToAdd = document.createElement("a"); var imgNodeToAdd = document.createElement("img"); Nod Eklemek (3/9) • Oluşturulan noda özellik eklemek için ise daha önce gösterilen setAttribute metodu kullanılabilir nodeToAdd.setAttribute("class", "regular"); imgNodeToAdd.setAttribute("border", "1"); Nod Eklemek (4/9) • Yeni bir metin nodu (text node) oluşturmak içinse document nesnesinin createTextNode metodu kullanılır var newTxt = document.createTextNode("Hello!"); • Oluşturulan bir metin nodunu, bir elemanla ilişkilendirmek için (örneğin paragraf) ilgili elementin appendChild metodu kullanılır • Bu metod metin nodunu, elemente alt nod olarak ekler nodeToAdd.appendChild(newTxt); Nod Eklemek (5/9) • Şu ana kadar bir paragraf, bu paragrafın özelliği ve içeriği oluşturuldu • Ancak bu paragraf sayfaya henüz eklenmedi • Paragrafı sayfaya eklemek için hedef bir <div> elementi bulunabilir ve appendChild metodu kullanılarak, paragraf bu <div> etiketine alt nod olarak eklenebilir • Bir sonraki slaytta bu kullanım gösterilmektedir Nod Eklemek (6/9) var parentDiv = document.getElementById("div1"); var newParagraph = document.createElement("p"); var t = document.createTextNode("Hello world!"); newParagraph.appendChild(t); parentDiv.appendChild(newParagraph); Nod Eklemek (7/9) • Hedef <div> elementinin altında halihazırda 3 paragrafın olduğunu ve yeni paragrafı bu paragrafların üstüne eklemek istediğinizi varsayın • Bu durumda appendChild metodu işe yaramayacaktır • insertBefore metodunun kullanılması gerekir • insertBefore metodu, yeni eklenecek elementi belirtilen elementin önüne yerleştirecektir • İstenen işlemin insertBefore metodu ile gerçekleştirimi bir sonraki slaytta verilmiştir Nod Eklemek (8/9) var parentDiv = document.getElementById("div1"); var newParagraph = document.createElement("p"); var t = document.createTextNode("Hello world!"); newParagraph.appendChild(t); paragraph1 = parentDiv.firstChild; parentDiv.insertBefore(newParagraph, paragraph1); Nod Eklemek (9/9) • Benzer şekilde, yeni nodu, belirli bir elementin ardından yerleştirmek gerekebilir • Bu amaçla insertAfter metodu bulunmamaktadır • Bu işlem nextSibling özelliğini kullanarak bir sonraki elementin önüne insertBefore kullanarak aşağıdaki gibi gerçekleştirilebilir var target = parentDiv.childNodes[1]; parentDiv.insertBefore(newE, target.nextSibling); Nod Silmek Bir nodun alt nodu, removeChild metodu kullanılarak aşağıdaki gibi silinebilir var parentDiv = document.getElementById("div1"); var nodeToRemove = parentDiv.childNodes[2]; parentDiv.removeChild(nodeToRemove); Web Tarayıcısı Kontrolü – URL’yi almak ve Değiştirmek (1/8) • JavaScript web tarayıcısının kontrolünde de kullanılabilir • O an zıyaret edilen sayfayı elde etmek için window nesnesinin ilgili özellikleri aşağıdaki gibi kullanılabilir var whereWeAt = window.location.href; • Eğer şu anda ziyaret edilen sayfa "http://www.alanim.com/products/page12.html#bottom" ise whereWeAt değişkenin içerisine bu değer atanacaktır Web Tarayıcısı Kontrolü – URL’yi almak ve Değiştirmek (2/8) • Aynı zamanda bu bilginin parçaları da elde edilebilir • Sadece alan adını almak için aşağıdaki satır kullanılabilir var theDomain = window.location.hostname; • Bu durumda theDomain değişkenin içine "www.alanim.com" değeri atanacaktır • Baştaki "http://" kısmının alınmadığına dikkat edin Web Tarayıcısı Kontrolü – URL’yi almak ve Değiştirmek (3/8) • Veya alan adından sonraki yol (path) alınmak istenirse aşağıdaki satır kullanılabilir var thePath = window.location.pathname; • Bu durumda thePath değişkenin içine "/products/page12.html" değeri atanacaktır • Baştaki "/" işaretine dikkat edin Web Tarayıcısı Kontrolü – URL’yi almak ve Değiştirmek (4/8) • Örnek URL’de web tarayıcısı ilgili sayfanın "#bottom" ile işaretlenmiş bölümüne yönlendiriliyordu • http://www.alanim.com/products/page12.html#bottom • "#bottom" parçasını almak için aşağıdaki satır kullanılabilir var theAnchor = window.location.hash; • Bu durumda theAnchor değişkenin içine "#bottom" değeri atanacaktır Web Tarayıcısı Kontrolü – URL’yi almak ve Değiştirmek (5/8) • window.location nesnesini kullanarak, benzer şekilde, web tarayıcısına hangi sayfaya gitmesi gerektiğini de söyleyebilirsiniz window.location.href = "http://www.alanim.com/about.html"; • Bu satır web tarayıcısını "http://www.alanim.com/about.html" web sayfasına yönlendirecektir Web Tarayıcısı Kontrolü – URL’yi almak ve Değiştirmek (6/8) Aşağıdaki kod parçası web tarayıcısını aynı web sitesinde başka bir web sayfasına yönlendirmektedir var currentSite = window.location.hostname; var destination = "http: //" + currentSite + "/deneme. html"; window.location.href = destination; Web Tarayıcısı Kontrolü – URL’yi almak ve Değiştirmek (7/8) Aşağıdaki kod parçası web tarayıcısını aynı sayfada başka bir bölüme yönlendirmektedir var currentSite = window. location. hostname; var currentPath = window. location. pathname; var destination = "http: //" + currentSite + currentPath + "#middle"; window. location. href = destination; Web Tarayıcısı Kontrolü – URL’yi almak ve Değiştirmek (8/8) • Web tarayıcısını yeni bir sayfaya yönlendirmek için, alternatif olarak, window.location nesnesinin assign ve replace metodları kullanılabilir window.location.assign("http://www.alanim.com/about.html"); window.location.replace("http://www.alanim.com/about.html"); • İki metod arasındaki fark: assign metodu web tarayıcısı geçmişinde (web browser history) yönlendirilmeden önceki sayfayı korurken, replace metodu bu sayfayı tarihçeden siler • Assign metodu kullanıldığında web tarayıcısının geri (back) butonunu kullanarak bir önceki sayfaya gidebilirsiniz Web Tarayıcısı Kontrolü - Web Sayfasının Yeniden Yüklenmesi • O anki sayfayı yeniden yüklemek için aşağıdaki yöntemlerden biri kullanılabilir window.location.reload(true) ; window.location.reload(false) ; window.location.reload() ; • Eğer true parametresi gönderilirse, JavaScript sayfanın sunucudan alınmasını sağlar • Parametre false olursa veya belirtilmezse, web tarayıcısı sayfayı öncelikle ön belleğinden yüklemeye çalışacaktır Web Tarayıcısı Kontrolü – İleri veya Geri Gitmek • history nesnesinin forward ve back metotlarını kullanarak web tarayıcında, önceki ve sonraki sayfalara geöilebilir history.forward() ; history.back() ; • Daha sonraki veya daha önceki sayfalara geçmek için go metodu da kullanılabilir history.go(2); history.go(-4); Web Tarayıcısı Kontrolü – Referrer • Eğer kullanıcı o anki safaya bir bağlantıyı tıklayarak gelmişse, geldiği sayfanın URL’sini document nesnesinin referrer özelliğini kullanarak elde edebilirsiniz var whereUserCameFrom = document.referrer; • Bu durumda whereUserCameFrom değişkeni bir önceki sayfanın URL’sini içerecektir Web Tarayıcısı Kontrolü – Pencereyi İçerikle Doldurmak (1/4) • Web tarayıcısnda yeni bir pencere açmak için window nesnesinin open metodu kullanılır var monkeyWindow = window.open(); • Bu metod, herhangi bir parametre kullanılmazsa maksimum boyutta boş bir pencere açar • Metoddan geri dönen değer, bu pencereyi daha sonra kullanabilmemiz için gereken pencere nesnesidir (window handle) • Web tarayıcısına bağlı olarak pencere, yeni bir web tarayıcı olarak, yeni bir tab olarak veya varolan pencerenin üzerine açılabilir Web Tarayıcısı Kontrolü – Pencereyi İçerikle Doldurmak (2/4) • Bir pencereyi doldurmak için üç farklı yol vardır • Bunlardan biri write metodunu kullanmaktır • Aşağıdaki kod parçası yeni bir pencere açmakta ve bu pencerenin içini windowContent değişkeni içerisinde tutulan HTML kodu ile doldurmaktadır var monkeyWindow = window. open() ; var windowContent = "<h1>Capuchin monkey</h1> <img src= 'monkey.jpg'><p>The capuchin derives from... </p>"; monkeyWindow.document.write(windowContent); Web Tarayıcısı Kontrolü – Pencereyi İçerikle Doldurmak (3/4) • Bir pencereyi doldurmak için ikinci yol, ilgili pencereye yeni bir web sayfası adresi atamaktır • Bunu gerçekleştirmenin iki yolu aşağıda gösterilmiştir: monkeyWindow.location.assign("http://www.animals.com"); monkeyWindow.location.href = "http://www.animals.com"; Web Tarayıcısı Kontrolü – Pencereyi İçerikle Doldurmak (4/4) • Bir pencereyi doldurmanın en çok kullanılan yolu ise open metodunu kullanmaktır var monkeyWindow = window.open("http://www. animals.com"); • Açılacak sayfa, o anki sayfa ile aynı alan adına sahipse, kısaca aşağıdaki gibi yazılabilir var monkeyWindow = window.open("capuchin.html") ; Web Tarayıcısı Kontrolü – Açılan Pencerenin Kapatılması Açılan bir pencereyi kapatmak için close metodu aşağıdaki gibi kullanılır: monkeyWindow.close(); Web Tarayıcısı Kontrolü – Pencerenin Boyutunun ve Konumunun Belirlenmesi (1/4) • Yeni bir pencere açmak için kullanılan open metodunu farklı parametrelerle de kullanmak mümkündür • Eklenebilecek ikinci bir parametre pencere adıdır var monkeyWindow = window.open("monk. html", "win1"); • URL parametresi boş olarak gönderilebilir var monkeyWindow = window.open("", "win1"); Web Tarayıcısı Kontrolü – Pencerenin Boyutunun ve Konumunun Belirlenmesi (2/4) • Üçüncü bir parametre ile pencere boyutu da belirlenebilir var monkeyWindow = window.open("monk.html", "win1", "width=420,height=380"); • Üçüncü paramtre belirtilirken, çift tırnaklar içerisinde boşluk bırakılmaması zorunludur • Sayılar piksel olarak belirtilmektedir • width ve height’in hangi sırada yazıldığı önemli değildir Web Tarayıcısı Kontrolü – Pencerenin Boyutunun ve Konumunun Belirlenmesi (3/4) • Ekrandan daha küçük boyutta pencereler, ekranın sol üst köşesinde gösterilirler • Bu tür pencerlerin, ekranın neresinde gösterileceğini aşağıdaki şekilde belirtebilirsiniz var w = window. open("", "", "width=420,height=380,left=200,top=100"); • Son ikiparametre sırasıyla ekranın solundan ve üstünden kaç piksel öteye pencerenin konumlanacağını belirtmektedir Web Tarayıcısı Kontrolü – Pencerenin Boyutunun ve Konumunun Belirlenmesi (4/4) Alternatif olarak, tüm bu parametreler tek bir değişken aracılığıyla aşağıdaki gibi belirtilebilir var windowSpecs = "'faq.html', 'faq', 'width=420,height=380,left=200,top=100'"; var faqPage = window.open(windowSpecs); Form Doğrulama – Metin Alanları (1/6) • Aşağıdaki gibi bir formumuz olduğunu varsayalım <form onSubmit="return checkForLastName();"> Please enter your last name. <br> <input type="text" id="lastNameField"> <input type="submit" value="Submit Form"> </form> • Kullanıcı butonuna "submit" tıkladığında checkForLastName fonksiyonu çağırılacaktır Form Doğrulama – Metin Alanları (2/6) • checkForLastName fonksiyonu aşağıdaki gibi tanımlanmıştır function checkForLastName() { if (document.getElementById("lastNameField").value.length === 0) { alert("Please enter your last name") ; return false; } } • Fonksiyon lastNameField alanına yazılan değerin uzunluğunu kontrol etmekte ve uzunluk sıfırsa kullanıcıyı uyarmakta ve false döndürmekte Form Doğrulama – Metin Alanları (3/6) • Aşağıdaki kod parçasında tekrar return yazıldığına dikkat edin <form onSubmit="return checkForLastName();"> • Buraya return yazılması sayesinde fonksiyondan false döndüğünde form bilgilerinin sunucuya gönderilmesine engel olunur • Buraya return yazılmayacak olursa, kullanıcıya mesaj gösterilecektir ancak form bilgileri buna rağmen sunucuya gönderilecektir Form Doğrulama – Metin Alanları (4/6) Daha kullanıcı dostu bir web sayfası oluşturabilmek için, focus metodu kullanılarak imleç doldurulması gereken alana götürülebilir function checkForLastName() { if (document.getElementById("lastNameField").value.length === 0) { alert("Please enter your last name"); document.getElementById("lastNameField").focus(); return false; } } Form Doğrulama – Metin Alanları (5/6) document.getElementId metodunun birden fazla kullanımı kodu gereksiz yere uzattığından bu metotu sadece bir kere çalıştırmak ve elde edilen elemanı bir değişkene atıp kullanmak mümkün function checkForLastName() { var targetField = document.getElementById("lastNameField"); if (targetField.value.length === 0) { alert("Please enter your last name"); targetField.focus(); return false; }} Form Doğrulama – Metin Alanları (6/6) Kullanıcı dostu sayfa oluşturmak için, doldurulması gereken alanın arka plan rengini sarı yapmak da mümkün var targetField = document.getElementById("lastNameField"); if (targetField.value.length === 0) { alert("Please enter your last name"); targetField.focus(); targetField.style.background = "yellow"; return false; } targetField.style.background = "white"; Form Doğrulama – Drop-down (1/4) Aşağıdaki gibi bir formumuz olduğunu varsayalım <form onSubmit="return checkForSelection();"> <select id="states"> <option value="" selected="selected">SELECT A STATE</option> <option value="AL">Alabama</option> <option value="AK">Alaska</option> </select> <input type="submit" value="Submit Form"> </form> Form Doğrulama – Drop-down (2/4) Daha önceki örneğe benzer şekilde, formun submit butonuna tıklandığında aşağıdaki checkForSelection metodu çağırılacaktır function checkForSelection() { if (document.getElementById("states").selectedIndex === 0) { alert("Please select a state. ") ; return false; } } Form Doğrulama – Drop-down (3/4) • selectedIndex’in sıfır olması, kullanıcının herhangi bir seçim yapmadığını göstermektedir • Bu durumda kullanıcıdan bir seçim yapması istenmekte ve form bilgilerinin sunucuya gönderilmesi önlenmektedir • Bir sonraki slaytta fonksiyon iki şekilde değiştirilmektedir: 1. Kontrol edilecek form elemanın ID’si parametre olarak gönderilmektedir. Bu sayede fonksiyon farklı formlar üzerinde de çalışabilecektir 2. İlgili form elemanı bir değişkene atanmakta ve bu değişken üzerinden kullanılmaktadır Form Doğrulama – Drop-down (4/4) function checkForSelection(selecID) { var target = document.getElementById(selecID); if (target.selectedIndex === 0) { alert("Please select a state. ") ; return false; }} Bu durumda fonksiyon, form içerisinden aşağıdaki gibi çağırılmalıdır <form onSubmit="return checkForSelection('states');"> Form Doğrulama – Radio Button (1/2) Aşağıdaki gibi bir formumuz olduğunu varsayalım <form onSubmit="return validateRadios();"> <input type="radio" name="r1" value="cat"> Cat<br> <input type="radio" name="r1" value="bat"> Bat<br> <input type="radio" name="r1" value="hat"> Hat<br> <input type="submit" value="Submit Form"> </form> Form Doğrulama – Radio Button (2/2) Daha önceki örneğe benzer şekilde, formun submit butonuna tıklandığında aşağıdaki validateRadios metodu çağırılacaktır function validateRadios() { var radios = document.getElementsByName("r1"); for (var i = 0; i < radios.length; i++) if (radios[i].checked) return true; alert("Please check one. ") ; return false; } Form Doğrulama – Posta Kodları (1/5) • Posta kodları 5 rakamdan oluşmaktadır • HTML ile kullanıcının maksimum 5 karakter girmesi zorlanabilir • Ancak, 5 karakterden az girmesi veya rakam yerine karakter girmesi durumları JavaScirpt ile kontrol edilmelidir • Bir sonraki slayttaki validateZIP metodunda kullanıcının posta kodu alanına 5 karakterden az girmesi kontrol edilmekte ve az girilmesi durumunda kullanıcı uyarılmakta ve form bilgisinin sunucuya gönderilmesi engellenmektedir Form Doğrulama – Posta Kodları (2/5) function validateZIP() { var numChars = document.getElementById("zip").value.length; if (numChars < 5) { alert("Please enter a 5-digit code."); return false; } } Form Doğrulama – Posta Kodları (3/5) • Kullanıcının sadece rakam girmesini sağlamak için ise validateZIP metodunu güncellemeliyiz • Sonraki iki slaytta validateZIP metodunun göncellenmiş hali bulunmakta • Eklenen kod parçası, girilen her bir karakterin sayı olup olmadığını kontrol etmekte • Bu amaçla her bir karakter sayıya çevirilmeye çalışılmakta ve herhangi bir karakterin sayıya çevrilememesi durumunda metot false döndürmekte Form Doğrulama – Posta Kodları (4/5) function validateZIP() { var valueEntered = document.getElementById("zip").value; var numChars = valueEntered.length; if (numChars < 5) { alert("Please enter a 5-digit code. ") ; return false; } Form Doğrulama – Posta Kodları (5/5) for (var i = 0; i <= 4; i++) { var thisChar = parseInt(valueEntered[i]) ; if (isNaN(thisChar)) { alert("Please enter only numbers. ") ; return false; } }} Olayların İşlenmesi (1/4) • Önceki slaytlarda, satıriçi olay işleyicilerini kullanarak olayları nasıl işleyebileceğinizi gördünüz • Ancak JavaScript HTML içerikten olabildiğince ayrı tutulmalıdır • Satır içi olay işleyicisi aşağıdaki şekilde kullanılıyordu <input type="button" value="Click" onClick="sayHello();"> • Bu kullanımı bırakmak için öncelikle kırmızı ile gösterilen kod parçası aşağıdaki gibi ID ile değiştirilmelidir <input type="button" value="Click" id="button1"> Olayların İşlenmesi (2/4) • Bu durumda, olayı işleyecek JavaScript kodu aşağıdaki gibi olacaktır var b1 = document.getElementById("button1"); b1.onclick = sayHello; • onclick özelliğinin küçük harfle yazıldığına dikkat edin • Fonksiyon adından sonra parantezler kullanılmadığına dikkat edin • İstenirse bu iki satır tek satır olarak ifade edilebilir document.getElementById("button1").onclick = sayHello; Olayların İşlenmesi (3/4) • İlgili JavaScript fonksiyonun yazımında bir değişiklik olmamaktadır function sayHello() { alert("Hi there. "); } • Kullanıcı bir resmin üzerine geldiğinde resmin başka bir resimle değiştirilmesi aşağıdaki şekilde gerçekleştirilebilir var targetImg = document.getElementById("i12"); targetImg.onmouseover = swapPic; Olayların İşlenmesi (4/4) Bir formdaki email adresinin gönderilmeden önce kontrol edilmesi ve email adresinin doğru formatta girilmemesi durumunda form bilgilerinin sunucuya gönderilmemesi aşağıdaki şekilde gerçekleştirilebilir var emailFrm = document. getElementById("form5") ; emailFrm.onsubmit = valEmail;
Benzer belgeler
Otomatik Form Doldurma Saldırıları ve Bu Tür Saldırılara
• Web tarayıcısını yeni bir sayfaya yönlendirmek için, alternatif olarak,
window.location nesnesinin assign ve replace metodları kullanılabilir
window.location.assign("http://www.alanim.com/about.h...
Web Programlama
• Örneğin aşağıdaki HTML kod parçası için nName değişkenine "onMou
seover" değeri atanır
• Özelliğin değerini almak içinse nodeValue özelliği kullan...
Detaylı