JQuery 3.0 itibarıyla .bind()
kaldırıldı. V1.7'den itibaren dökümana olay
işleyiciler bağlamak için kullanılan .on() metoduna geçildi. Daha
önceki versiyonlar için elemanlara direk olarak olay işleyici eklemek için .bind()
metodu kullanılabilir. JQuery'de olay işleyiciler seçilmiş olan elemanlara bağlanır,
bu durumda .bind()
ile olay bağlanacak elemanların olay tanımı yapılırken
dökümanda mevcut olması gerekir. Daha esnek olay bağlamaları için
.on()
metodunda delegasyonlu olay bağlamalarına
bakabilirsiniz.
eventType
değerinde her string değer olabilir, eğer olay tipi
standart DOM olayı değilse kullanıcı tanımlı bir olay olarak bağlanır. Bu olaylar
tarayıcı tarafından hiçbir zaman tetiklenemez, ama JavaScript kodunda .trigger()
ve .triggerHandler()
metodları ile tetiklenebilir.
Eğer eventType
string içinde nokta karakteri varsa olay bir namespace
içinde gruplanmıştır. Örneğin .bind( "click.name", handler )
komutunda
click
olay tipidir ve name
stringi ise namespace'dir. Namespace
vererek bir gruba topladığınız olayları diğerlerine dokunmadan iptal edebilme kolaylığı
vardır. Ayrıntı için .unbind()
metoduna bakabilirsiniz.
Bazı olayların kendilerine ait dökümanları var, bunların listesi için Olaylar Kategorisine bakınız.
Bir olay bir elemana eriştiğinde elemandaki o olaya ait tüm olay işleyiciler ateşlenir. Eğer birden fazla olay işleyici bağlanmışsa , kod çalışırken bağlanma sıralarına göre çağrılırlar. Tüm olay işleyiciler çalıştırıldıktan sonra olay üst elemanlara doğru normal yayılımına devam eder.
.bind()
metodunun temel kullanımı :
Bu kod ID değeri foo
olan elemanın click
olayına cevap vermesini
sağlar. Kullanıcı bu elemana tıkladığında bir mesaj alert ile verilir.
Çoklu Olaylar
Birden çok olaya bağlantı yapılacaksa olay tipleri aralarında boşluk vererek girilir.
Sayfada bir <div id="foo">
elemanımız olsun (başlangıçta da "entered"
sınıfı olmasın). Mouse bu eleman üzerine getirilince "entered" değeri class değerlerine
eklenir, mouse eleman dığına çıkarken tersi olur , yani class değerlerinden "entered"
değeri çıkarılır.
JQuery 1.4 ile birçok olaya birçok olay işleyiciyi bir nesne içinde vererek bağlayabilme imkanı verildi.
Olay İşleyiciler
handler
parametresi yukarda gösterildiği gibi bir callback fonksiyon
alır. Olay işleyici içinde this
kelimesi olayın bağlandığı DOM elemanıdır.
Bu elemanı jQuery metodları ile kullanmak için $()
fonksiyonundan yardım
alınır. Örneğin :
Bu kod çalıştırıldıktan sonra ID değeri "foo"
olan elemana tıklanınca
içeriğindeki yazı alert ile verilir. Burada $( this )
ile click
olayının bağlandığı eleman jQuery metodları ile kullanılabiliyor.
JQuery 1.4.3 ile olay işleyici fonksiyon yerine false
değeri girebilme
imkanı verildi, bu aslında function(){ return false; }
callback tanımının
kısa hali olarak kabul edilir. Daha sonra bu bağlamayı iptal için .unbind( eventName, false )
kullanılabilir.
Olay işleyici fonksiyon olan handler
değerindeki fonksiyon da parametre
alabilir. Fonksiyon çağrıldığında event nesnesi ilk parametrede fonksiyona geçirilir.
Event nesnesi genellikle kullanılmadığından olay işleyiciye parametre girmeden çağrılabilir. Ama olay ve kullanıcının ortamı hakkında daha fazla bilgiler gerektiğinde event nesnesi kullanılabilir. Ayrıntılı bilgi için Event Nesnesi dökümanına bakınız.
Bir olay işleyiciden false
değeri dönmek olay nesnesinde hem
.preventDefault()
hem .stopPropagation()
metodlarını
çağırır.
Event nesnesini olay işleyicide kullanmak şuna benzer:
Anonim fonksiyona parametre verildiğini görüyorsunuz. Bu kod çalıştırıldıktan sonra ID değeri
foo
olan elemana tıklanınca alert mesajında mouse işaretçinin o andaki
koordinatları gösterilir.
Olay Verilerini Göndermek
Opsiyonel eventData
parametresinin kullanımı pek yaygın değilidr. Ama
eğer verilirse bu parametre bize olay işleyiciye başka veriler gönderme imkanı sunar.
En çok lazım olduğu yerlerden biri closure dediğimiz değerler. Örnek olarak
harici bir değişkenin değerine başvuran iki olay işleyici düşünelim.
Her iki olay işleyici de örtülü değer (closure) olarak message
değişkenini
kullanıyor. Ama bu kod olay tanımlarını içeriyor ve olay gerçekleştiği anda message
değişkeninde ne varsa her ikisi de o mesajı verecektir. Sadece gördüğümüz atamalar
varsa her iki elemana da tıklanınca en son mesaj olan "Not in the face!" mesajı
alert edilecektir. Bunu düzeltmek için olay bağlandığı andaki mesaj değerini
eventData
parametresi ile verebiliriz.
Bu şekilde olunca her olayın eventData
değerinde kendi tanımlandığı andaki
mesaj olacağı için her iki olay işleyici farklı mesaj verecektir.
Not: Nesneler fonksiyonlara parametre olarak verilirken referans olarak verilir , nesne değerlerle çalışırken senaryo karışabilir.
Eğer eventData
verilecekse .bind()
metodunda ikinci parametre
olmalıdır. Eğer olay işleyiciye bir değer göndermek gerekmezse ikinci parametrede olay
işleyici fonksiyon olur ve başka parametre verilmez.
Eğer dışardan tetiklemeyi .trigger()
ile yapacaksanız sadece o tetiklemeye
özel parametreler için metodun açıklamasına bakınız.
Not : Aşağıdaki örnekteki gibi aynı elemana hem click
hem
dblclick
olayları bağlanırsa kullanılan tarayıcıya göre farklı davranış
oluşabilir. Kimi tarayıcılar iki defa tek tıklama olayı oluştururken kimisi bir tane
çift tıklama olayı oluşturur.
Paragraf için tıklama ve çift tıklama olayları bağla.
Click or double click here.
Tüm paragraflara tıklanınca içlerindeki yazıyı alert eden olay işleyici bağla.
Olay işleyiciden önce bazı verileri girebilirsiniz.
Fonksiyondan false
değer dönerek elemanın default aksiyonunu ve olayı
yukarı doğru yaymasını engelleyebilirsiniz.
Sadece default aksiyonu engellemek içinse .preventDefault()
metodu kullanılabilir.
Default aksiyonu engellemeden olayın yukarı doğru yayılmasını (bubling) engellemek için
.stopPropagation()
metodu kullanılır.
Kullanıcı tanımlı olay bağlamak.
Özel tanımlı olay bağlanmış eleman.
Birçok olay işleyicisi bağlamayı aynı anda da yapabilirsiniz.
.
.