Kişisel Bir Web Günlüğü

jQuery ve Olaylar

JQueryBir önceki jQuery ve Css işlemleri konusundan sonra şimdi çok daha önemli olan olaylar (events) konusuyla devam edelim. Olaylar, bir kullanıcının bir web sayfasında yapmış olduğu etkileşimlerdir. Örneğin kullanıcı bir linke tıkladığında click olayı, klavyeden bir tuşa bastığında ise keydown olayı gerçekleşmiş olur. Bu olayların ne olduğunu ve bu olaylar oluştuğunda nasıl işlemler yapılabileceğini bu yazıda anlatmaya çalışacağım.

Olaylar konusunu 5 başlık altında anlatmaya çalışacağım. Bu yüzden önce başlıklarına bir gözatalım:

  1. Sayfa yüklendiği anda kod çalıştırmak
  2. Anonim fonksiyonlardan faydalanmak
  3. Olay Yardımcıları
  4. Olay işleme
  5. Etkileşim yardımcıları

Yazı başlıklarını da öğrendikten sonra artık başlayabiliriz ;)

1. Sayfa yüklendiği anda kod çalıştırmak

Öncelikle bundan sonra sık sık kullanacağımız ready olayını tanıyalım. Bu olay ile bir elemanın kullanıma hazır olduğu anda işlemler yapabiliyoruz. Örneğin web sayfamızın yüklenip de kullanıma hazır olduğu anda bir fonksiyon çalıştırmasını sağlayalım:

$(document).ready( calisacakFonksion );

$(document) ifadesi ile üzerinde çalışacağımız belgeyi (dökümanı) seçtik. Daha sonra bu belgenin ready olayında calisacakFonksiyon isimli fonksiyonun işlem görmesini belirttik. şimdi küçük bir örnekle bu durumu pekiştirelim:

$(document).ready( mesajGoster );

function mesajGoster()
{
    alert('merhaba dünya');
}

Bu kodlara sahip bir web sayfası yüklendiğinde "merhaba dünya" yazan mesaj kutusu gösterilecektir. Test etmek için Örnek 1 sayfasına bakabilirsiniz.

2. Anonim fonksiyonlardan faydalanmak

Dikkat ettiyseniz üstteki örnekte mesajGoster() fonksiyonu herhangi bir parametre almıyor. Fakat pekçok zaman bir fonksiyona parametreler göndermemiz gerekebiliyor. Örneğin mesajGoster() fonksiyonuna bir isim parametresi ekleyelim.

function mesajGoster( isim )
{
    alert('merhaba ' + isim);
}

Böyle bir durumda fonksiyonumuza parametre göndererek çalışmasını sağlamak için $(document).ready(mesajGoster) yerine şöyle bir kod kullanıyoruz:

$(document).ready( function() {

    mesajGoster( 'türkiye' );

});

Bu kodların olduğu bir web sayfası yüklendiği zaman "merhaba türkiye" yazan mesajı gösterecektir. Test etmek için Örnek 2 sayfasına bakabilirsiniz.

3. Olay Yardımcıları

Yazının giriş kısmında da belirttiğim gibi kullanıcının bir linke tıklamasından, klavyedeki bir tuşa basmasına kadar pekçok türde olay bulunuyor. jQuery ise bu olay türlerinin hepsini Olay Yardımcıları (Event Helpers) başlığı altında toplamış. işte biz de bu yardımcıları kullanarak istediğimiz işlemlerin istediğimiz bir olay gerçekleştiği anda icra edilmesini sağlayabiliyoruz. jQuery Events sayfasından olay yardımcılarının tamamına ulaşabilirsiniz. Ben burada en fazla kullanıldığını düşündüğüm olay yardımcılarından bahsedeceğim.

  • click(): bir elemana tıklanıldığında
  • dblclick(): bir elemana çift tıklanıldığında
  • mouseover(): fare imleci bir elemanın üzerine geldiğinde
  • mouseout(): fare imleci bir elemanın üzerinden başka bir yere götürüldüğünde
  • focus(): bir form elemanına odaklanıldığında
  • blur(): odaklanılmış bir form elemanından başka bir yere odaklanıldığında
  • change(): bir form elemanı değiştirildinde
  • submit(): bir form gönderildiğinde
  • keydown(): klavyeden bir tuşa basıldığında
  • keyup(): klavyeden bir tuşa basılıp bırakıldığı anda

Olay yardımcılarının kullanımı da aynen birinci bölümde bahsettiğim ready olayınınki gibidir. Fakat biz yine de bir örnek yapalım. Örneğimizde ID özniteliği "link" olan bir bağlantıya tıklandığında web sayfamızın arkaplan rengi yeşil olsun:

$(document).ready( function() {

    $('a#link').click( function(){

    	$('body').css('background-color', '#349934');

    })
});

Bu örnekte ilkönce web sayfamız kullanıma hazır mı değil mi $('document').ready() ile kontrol ettik. Daha sonra da $('a#link') ile bağlantımızı seçtik ve click() olayı gerçekleştiğinde web sayfamızın arkaplan rengini yeşil yapmış olduk. css() ifadesinin ise bir elemanın css özelliğini değiştirdiğini bir önceki yazı‘dan hatırlıyor olmalısınız. Bu örneği Örnek 3 sayfasında test edebilirsiniz.

4. Olay işleme

jQuery ile olayları daha kapsamlı bir biçimde işleyebilmek için Olay işleme (Event Handling) fonksiyonlarını kullanıyoruz. Bu fonksiyonlar ile bir elemana yukarıda bahsettiğimiz olay yardımcılarından herhangi birisini atayabilir, önceden atadığımız bir olayı kaldırabilir veya bir eleman içerisinden başka bir elemana atanmış olan olayı tetikleyebiliriz. Benim anlatacağım olay işleme fonksiyonları bind(), unbind(), one() ve trigger() olacak.

ilkönce bind() fonksiyonuna bakalım. Bu olay işleme fonksiyonun amacı herhangi bir elemana olay yardımcılarından birisini atamaktır. Diğer önemli bir görevi ise yukarıda bahsettiğimiz olay yardımcılarının dışında kendimize özel olaylar da oluşturabilmektir. Alttaki örnek ile ID özniteliği "link" olan bir bağlantıya tıklandığı zaman web sayfamızın arkaplan rengi yeşil oluyor.

$(document).ready( function() {

    $('a#link').bind('click', function(){
        $('body').css('background-color', '#349934');
    });

});

Aslında bu örnekte yapmış olduğumuz iş bir önceki Örnek 3 ile aynı sonucu verecektir. Fakat bind() ile atadığımız herhangi bir olayı, istediğimiz zaman unbind() fonksiyonu ile kaldırabilme avantajına sahibiz. şimdi unbind() fonksiyonunu inceleyelim.

$(document).ready( function() {

    $('a#link').unbind('click');

});

Bu şekilde daha önceden ID özniteliği "link" olan bağlantıya atadığımız "click" olayını kaldırmış oluyoruz. Böylece bu bağlantıya tıklandığında artık hiçbirşey olmayacaktır. Eğer click, mouseover, dblclick… gibi sahip olduğu bütün olayları tek seferde kaldırmak isteseydik o zaman $('a#link').unbind(); ifadesini kullanmamız yeterli olacaktı. Bu son iki örneği bir arada test etmek isterseniz Örnek 4A isimli sayfaya bakabilirsiniz.

şimdi de one() isimli olay işleme fonksiyonuna bakalım. Bazen bir olayın yalnızca 1 kez olmasını isteriz. Örneğin kullanıcı bir bağlantıya tıkladığında birkez mesaj kutusu görünsün, diğer tıklamalarında ise bu mesaj kutusu görünmesin gibi…

$(document).ready( function() {

    $('a#link').one('click', function(){
        alert('bu mesaj kutusu yalnızca 1 kez görüntülenecek')
    })

})

işte üstteki örnekte kullanıcı, ID özniteliği "link" olan bağlantıya ilk tıklamasında mesaj kutusunu görecek, diğer tıklamada ise görmeyecektir. Bu örneği test etmek için Örnek 4B isimli sayfaya bakabilirsiniz.

Son olarak ise trigger()fonksiyonundan bahsedelim. Kendisi bir tetikçidir :) Örneğin bir bağlantının "click" olayında bir mesaj kutusu gösteriliyor olsun. Normalde bu mesaj kutusu biz yalnızca bağlantıya tıkladığımızda görüntülenecektir. Fakat trigger() ile bir buton üzerine geldiğimizde, bağlantıya atanmış olan Click olayının tetiklenmesini ve mesaj kutusunun gösterilmesini sağlayabiliyoruz. şimdi alttaki örneğe bakalım:

$(document).ready( function() {

    $('a#link').bind('click', function(){
        alert('merhaba dünya')
    })

    $('button').bind('mouseover', function(){
		$('a#link').trigger('click')
    })

})

Gördüğünüz gibi sondaki trigger('click') ifadesi ile bir buton içerisinden dışarıdaki bir bağlantının "click" olayını tetikleyebiliyoruz. Örneği test etmek için Örnek 4C isimli sayfaya bakabilirsiniz.

5. Etkileşim yardımcıları

Yazının ilk paragrafında olayların, bir kullanıcının bir web sayfasında yapmış olduğu etkileşimler olduğunu söylemiştik. işte bu etkileşimleri arttırmak için jQuery bizlere Etkileşim Yardımcıları (Interaction Helpers) isimli fonksiyonları sunmuştur. Bu fonksiyonlar hover() ve toggle() olmak üzere iki tanedir.

hover() fonksiyonu, fareyi bir elemanın üzerine getirdiğimizde bir işlem, üzerinden çektiğimizde ise başka bir işlem yapabilmemizi sağlıyor. Üçüncü bölümde bahsettiğimiz olay yardımcılarından mouseover() ve mouseout() ile de bunu yapabiliriz ama jQuery bize hover() ile önemli bir kolaylık sağlıyor. şimdi örneğe geçelim. Örnekte fareyi bir bağlantının üzerine getirdiğimizde web sayfamızın arkaplan rengi yeşil renk, üzerinden çektiğimizde ise mavi renk olsun.

$(document).ready( function() {
    $('a#link').hover( yesilYap, maviYap );
})

function yesilYap(){
    $('body').css('background-color', '#339933')
}

function maviYap(){
    $('body').css('background-color', '#509dee')
}

Örnekte ilk önce yesilYap() ve maviYap() isimli fonksiyonların hazır olduğunu kabul ediyoruz. Daha sonra ise hover() ile sırasıyla bağlantının üstündeyken ve üstünde değilken bu fonksiyonların çalıştırılmasını belirtiyoruz. Örneği test etmek için Örnek 5A sayfasına bakabilirsiniz.

şimdi ise diğer etkileşim yardımcısı olan toggle() fonksiyonuna bakalım. Bir önceki hover() fonksiyonuyla bir elemanın üzerindeyken ve üzerinde değilken olmak üzere 2 farklı işlem yapabiliyorduk. toggle() fonksiyonu ise bir elemana her tıkladığımızda farklı 2 işlemden birisinin yapılabilmesini sağlıyor. Yani bir bağlantıya ilk tıkladığımızda web sayfamızın arkaplanı yeşil oluyorken, diğer tıklayışımızda ise mavi oluyor. şimdi bu son dediğimizi bir örneğe dönüştürelim:

$(document).ready( function() {
    $('a#link').toggle( yesilYap, maviYap )
})

function yesilYap(){
    $('body').css('background-color', '#339933')
}

function maviYap(){
    $('body').css('background-color', '#509dee')
}

Gördüğünüz gibi toggle() fonksiyonu da hover() fonksiyonu gibi çalışıyor. Bu örneği test etmek için Örnek 5B sayfasına bakabilirsiniz.

Sonuç…

Bu yazıda, jQuery ile olayları yönetebilmek için gerekli olan fonksiyonlardan bazılarını anlatmaya çalıştım. Olaylar konusunda anlatmak isteyip de anlatamadığım daha birçok konu kaldı maalesef. Bunların hepsini tek bir yazıya sıkıştırmak istemedim. ilerleyen zamanlarda bunlardan yeri geldikçe bahsedeceğim. Siz yine de jQuery web sitesinin Events sayfasına bakmayı unutmayın ;)

12 Ocak 2008 Programlama Bugün 4 kez, toplamda ise 32.497 kez okundu. , , , ,
35 yorum var
  1. faydalı bir yazı olmuş teşekkürler

  2. Çok güzel Bir Yazı Olmuş
    Teşekkürler

  3. Ben mükemmel yazı yazmışsın demekten bıktım sen mükemmel yazı yazmaktan bıkmadın. işin şakası bir yana gerçekten harika bir yazı. Ama bir de bu örnekleri toplu olarak indirme imkanımız olsaydı tam süper olacaktı. Malum arşiv oluştururken lazım oluyor.

  4. Gerçekten güzel bir anlatım. Eline sağlık.

  5. Mükemmel bir anlatım. Ayrıca çok iyi bir konuya değinmişsin. Olmazsa olmazlardan diyebilirim. Parmaklarına sağlık ;)

  6. 3hece7harf 14 Ocak 2008 00:22

    Gerçekten çok başarılı ve bilgilendirici bir yazı olmuş. Teşekkürler.

  7. Teşekkür ederim arkadaşlar. Yazdığım bu yazıyı ilk kez okuduğumda “acaba çok mu karışık anlattım” diye kaygı duymuştum. Beğendiğinize sevindim doğrusu.

  8. Son derece istifade ettim. Teşekkürler.

  9. Çok güzel bir yazı. jQuery serilerinin yenilerini merakla bekliyorum.

  10. collision 20 Ocak 2008 16:28

    bayadır yazının devamını bekliyodum eline sağlık hocam çok güzel olmuş. peki devamı gelecek mi? sayende güzel şeyler öğrendiğimi söylemeliyim

  11. Anlatım çok iyi…

  12. 1 saattir jquery.com’da tırmalıyorum. bu siteye girmem yeterliymiş herşeyi anlamak için. teşekkürler…

  13. Sayenizde jquery ile tanıştım ve kullanmaya başladım. Takip etmeye devam edeceğim. Çok teşekkürler

  14. Hocam eline sağlık yazını okudum ve jquery grid eklentisiyle uğraşıyorum.Faydalı oldu teşekkürler.Yazıların Devamını beklerim :) ))

  15. Süpersin allah zihin açıklıgı versin :)

  16. ramazan eymur 8 Ocak 2009 18:27

    cidden eline sağlık senin sayende jquery tanıştım ve çok güzel şeyler yaptım :) :)

    javascriptle boşuna uğraşıyormuşuz

    cidden çok saol yazıların için

  17. Temiz ve açıklayıcı bir yazı olmuş. Örneklerle pekiştirilmiş olması öğrenilenin kalıcı olmasına yardımcı oluyor. Eline sağlık.

  18. nuri dönmez 20 Mayıs 2009 04:39

    faydanin faydasinda derler ya o hesap css degistirme cok isime yaradi bilmiyordum ogrenmis oldum sagolasin burhan hocam .))

  19. $(“#liurun”).hover(goster(‘urun’),gizle(‘urun’));
    şeklindeki kullanımda kod çalışmuyor. Bunun sebebi tırnaklar olsa gerek. Nasıl bir çözüm bulunabilir?

  20. @yedincisenol
    şu şekilde kullanmayı deneyin:

    $("#liurun").hover(
    function(){ goster("urun"); },
    function(){ gizle("urun"); }
    );

  21. Teşekkürler. Yazdığınız şekilde uyguladım ve oldu. :)

  22. ali önder kutlu 23 Haziran 2009 18:54

    bir önceki makalede css özelliklerini javaScript kurallarına göre yazmamız gerekli diye bir ifade geçiyor ancak $(‘body’).css(‘background-color’, ‘#339933′)
    }
    burda o kural uygulanmamış sebebi nedir?

  23. @ali önder kutlu
    Çünkü orada yalnızca 1 tane css özelliğini değiştiriyoruz ve bunu da css metoduna “string” türünde veriler girerek yapıyoruz. Eğer bu metoda 1′den fazla css özelliği girecekseniz, o zaman javaScript kurallarına uygun bir şekilde yazmanız lazım.

  24. ali önder kutlu 24 Haziran 2009 21:03

    teşekkürler…

  25. Bu kadar düzenli ve açık bir anlatımla insan konuyu bilse bile tekrar okuyası geliyor.
    Elinize sağlık tekrar.

  26. Gerçekten yol gösterici bir yazı olmuş. Çok Teşekkürler..

  27. Örnek 4B’de olayın sadece 1 kez gerçekleşmesi çok işime yaradı. Süper bi anlatım. Teşekkürler…

  28. jQuery’ de kullanabileceğimiz Matematik fonksiyonları mevcut mu ?

  29. @mcakir
    jQuery içerisinde özel matematik fonksiyonları bulunmuyor. JavaScript’in doğal (native) metotlarını kullanabilirsin.
    http://www.w3schools.com/js/js_obj_math.asp

  30. jquery için mükemmel bir kaynak olmuş.Teşekkürler.

  31. Hocam çok güzel anlatmışsınız. Bu makale ve biraz pratikle jquerye başlamak iyice kolaylaşacak benim için. Teşekkürler.

İçinizde kalmasın, siz de yorum yazın

Telif Hakkı © 2012 eburhan.com | Structure | XHTML