2010-10-09 8 views
5

Bir işlevi etkinleştirmeden önce bir olay olup olmadığını kontrol etmek istiyorum. Sorun, Google Chrome'un, FireFox'ta bulunmayan Video öğesindeki "loadedmetadata" etkinliğini desteklemesidir. Bir olay işleyicisinin jQuery veya JS kullanarak var olup olmadığını nasıl kontrol edebilirim?

Ben (mantıksal olan) O Firefox'ta iyi çalıştı aşağıdaki

$('video').bind('loadedmetadata', videoloaded); 
videoloaded(); 

yaptı ama Chrome'da çalışırken, fonksiyon iki defa idam edildi. loadedmetadata olay işleyicisinin, her tarayıcıda yalnızca bir kez işlevi çalıştırıp çalıştırmadığını kontrol edip etmediğini kontrol etmek istiyorum.

Böyle bir olasılık yoksa, bunun için herhangi bir zeki çalışma var mı?

cevap

5

Bu nesne olayınızı içeriyorsa, $video.data("events") numarasını kontrol edin, .bind kullandığınız için bu öğenin tüm olayları bu nesnede depolanır.

var $video = $("#video"); 
var $ve = $video.data("events"); 

// checking if a `loadedmetadata` object exists in `data("events")` 
if ($ve != null && typeof($ve.loadedmetadata) !== undefined) 
{ 
    // has loadedmetadata event 
} 

Tam çalışma example on jsFiddle

+0

@Peter: Ben jsFiddle üzerinde çalışan bunun bir örneğini ekledik. – BrunoLM

+0

@Bruno - Başladığımdan biraz daha şaşkınım :( –

+1

@Peter: Olayları bağlamak için her zaman jQuery kullanıyorsa, tüm eventhandler'in 'element.data (" events ")' üzerine depolandığı anlamına gelir. nesnenin olay hakkında bilgi içerdiği çeşitli nesneler içeren bir nesnedir, örneğin bir elemandaki olay 'x ',' element.data ("olaylar") "geri dönecektir:' ({x: [{handler: (function)() {}), data: (void 0), namespace: "", type: "x", guid: 31}]}) ' – BrunoLM

İlgili konular