2012-07-23 23 views
20

Sürükle/bırak olaylarını bağlamak istediğim bir sayfam var. Tarayıcıdaki tüm sayfanın bırakma hedefi olmasını isterim. Bu nedenle, etkinliklerimi document nesnesine bağladım. Uygulamamın içeriği, AJAX yoluyla ana içerik alanına yüklenir ve yükleme sayfası şu anda görünür durumda olduğunda yalnızca bu olay işleyicilerinin etkin olmasını isterim.Bir olay işleyicisini ancak önceden mevcut değilse nasıl bağlayabilirsiniz?

Şu anda, yükleme sayfası alındığında olay işleyicileriyle bağlantı kurarım; Ancak, yükleme sayfası her etkinleştirildiğinde, yeni bir olay işleyicisini bağlar; bu, işleyicinin, kullanıcı yükleme sayfasına gittiğinde, ayrıldığında ve sonra geri geldiğinde işleyicinin birden çok kez ateşlenmesine neden olur. İşleyiciyi ancak zaten bağlı olmadığında bağlayabilirsek bunu çözebileceğimi düşünüyordum. Bu mümkün mü, yoksa daha iyi bir alternatife mi bakıyorum?

İlgili kod, eğer yardımcı olur: yenilerini bağlayan

$(document).bind('dragenter', function(e) { 
    e.stopPropagation(); 
    e.preventDefault(); 
}).bind('dragover', function(e) { 
    e.stopPropagation(); 
    e.preventDefault(); 
}).bind('drop', function(e) { 
    e.stopPropagation(); 
    e.preventDefault(); 
    self._handleFileSelections(e.originalEvent.dataTransfer.files); 
}); 
+0

[jQuery onay olay elemana varsa] olası yinelenen (http://stackoverflow.com/questions/1515069/jquery-check-if-event-exists-on- element) – dgw

cevap

27

Ciltten Çıkar mevcut olay işleyicileri önce. Bu namespaced events [docs] gerçekten basittir:

$(document) 
    .off('.upload') // remove all events in namespace upload 
    .on({ 
     'dragenter.upload': function(e) { 
      e.stopPropagation(); 
      e.preventDefault(); 
     }, 
     'dragover.upload': function(e) { 
      e.stopPropagation(); 
      e.preventDefault(); 
     }, 
     // ... 
    }); 
+2

'on()' ve 'off()' yerine 'bind()' ve 'unbind()' kullanmak zorunda kaldım, ancak bu yöntem iyi çalıştı. Teşekkürler! – FtDRbwLXw6

+0

Evet, jQuery'nin eski bir sürümü ile sıkışmışsanız (bir nesneyi "bind" ifadesine geçirmek de işe yaramalıdır). Adlandırılmış olaylar jQuery 1.2'de tanıtıldı, bu nedenle kesinlikle çalışması gerekir :) Mutlu kodlama! –

İlgili konular