Javascript olaylarının kontrolü

by Eren 18. November 2008 14:41

Javascripti yavaş yavaş sevmeye başladım. Zira ısrarla  öğrenmemekte direndiğim bir dildi. Çoğu zaman insanın hayatını kolaylaştırıyor.
İlerde işime yarayacağına innandığım bir olayı buraya not etmek istiyorum.

Malum javascript'te olay tabanlı bir dil. Ama biz jscript olaylarını daha çok ;

<a href=”somepage.htm” name=”linkSomePage” onmouseover=”alert(‘You Moved?’)”

onclick=”alert(‘You Clicked?’)”>

Click Me

</a>

şeklinde kullanıyorduk. Ama istenirse sayfada gerçekleşen olayların tipi öğrenilip ona göre işlem yaptırılabilmektedir. 

var myEvent = window.event;

Gerçekleşen olayın tipine göre aşağıdaki gibi işlem yaptırıyoruz;

<script type=”text/javascript”>

function paragraph_eventHandler() {

if (window.event.type == “click”) { //The click event was fired.

alert(“You Clicked Me!”);

} else if (window.event.type == “mouseover”) { //The mouseover event.

alert(“You Tickled Me!”);

}

}

</script>

Bu fonksiyonun ismini olayları yakalayacağımız kontrollere set ederek gerçekleşen olaylarını yakalayabiliriz;

<p onmouseover=”paragraph_eventHandler()”>

Move your mouse over me.

</p>

<p onclick=”paragraph_eventHandler()”>

Click me!

</p>

Peki olayın hangi kontrolde tetiklendiğini nasıl öğreneceğiz?
Bunun için window.event.srcElement nesnesini kullanıyoruz.

var sourceElement = window.event.srcElement;

Kontrolü bu şekilde öğrenip herhangi bir özelliğini aşağıdaki şekilde değiştirebiliriz;

sourceElement.src = "ornek.gif";

Şimdi iyi hoş, güzel şeylerden bahsettik ama bir sorum var. Yukarıda bahsettiğimiz kodlar Internet Explorer'da çalıştığı gibi diğer browser'larda da çalışabilecekmi?

Diğer browserlerda kısaca şöyle farklılıklar vardır.

Mesela olaylara erişim ;

var myEvent = window.event;

şeklinde değilde

function paragraph_eventHandler(evt) {

var eventTarget = evt.target; //Elementin tipi IE dışındaki browser'larda bu şekilde alınıyor. 

if (evt.type == “click”) { //Olay tipi tıklama olma durumu.

alert(“You Clicked Me!”);

} else if (evt.type == “mouseover”) { //Olay tipi farenin kontrol üzerinden geçme durumu.

alert(“You Tickled Me!”);

}

}

şeklinde olmaktadır. Yukarıdaki kodlarla mukayese ettiğinizde farkı anlarsınız diye tahmin ediyorum.

Peki tüm bunları tüm browserlerda çalışabilir   hale nasıl getirebiliriz? Şu şekilde ;

function image_eventHandler(evt) {

var elementTarget;

if (evt.srcElement) { // browser  IE

elementTarget = evt.srcElement;

} else { // browser is IE değil

elementTarget = evt.target;

}

if (evt.type == “mouseover”) { //Fare resmin üzerinde.

elementTarget.src = “o.gif”; //Resmin sorce özelliğini değiştiriyoruz.

}

if (evt.type == “mouseout”) { //Fare resmin üzerinden kaçtı.

elementTarget.src = “x.gif”; //Source özelliğini eski haline getiriyoruz.

}

}

Gördüğünüz gibi yukarda browser kontrolü yapılıp browser tipine göre kod yazılmış.
srcElement objesi sadece IE'de yer aldığı için diğer browserlerde bu nesne null kalacaktır.

Tags:

javascript

Add comment


(Will show your Gravatar icon)

  Country flag

biuquote
  • Comment
  • Preview
Loading



Hakkımda Kısaca

Eren Çetin

Bilgisayar Mühendisi

İstanbul / Turkiye

Eren Çetin - 2010
Eren Çetin, Bilgisayar Mühendisi , Yazılım Geliştirme Uzmanı