2014-12-05 22 views
6

Nesne etiketinde hem standart hem de özel jquery olaylarında tetikleyici/tetikleyici görünmüyor.Olaylar, html5 nesne etiketi üzerinde çalışmaz

Bu çalışmaz:

var $test = $("<object>"); 
$test.on("test", function(){ 
    console.log("jquery test handler"); 
}); 
$test.trigger("test"); 

diğer html etiketleri (çalıştı div, video vs.) ile çalışır iken.

Vanilla js çözüm çalışır:

var test = document.createElement("object"); 
test.addEventListener("testV", function(e) { 
    console.log("vanilla test handler"); 
}); 
var event = new CustomEvent("testV"); 
test.dispatchEvent(event); 

jQuery ver. 1.11.1
Testler: http://codepen.io/anon/pen/dPGoJg


Sorular:

  1. I Am yalnızca bu hata var veya yanlış bir şey yapıyorum biri?
  2. Bu bir jQuery hatası mıdır, yoksa beklenen davranış mı?
  3. Herhangi bir geçici çözüm (özellikle başka bir öğeyi kullanmanın yanı sıra özel etkinlikler için)?

cevap

1

Öğe henüz DOM'a eklenmediğinden ilk örneğiniz çalışmıyor.

var $test = $("body").append("<object>"); 
$test.on("test", function(){ 
    console.log("jquery test handler"); 
}); 
$test.trigger("test"); 

Öğe eklemek için alternatif JQuery işlevlerini kullanabilirsiniz.

+1

Bu aslında işe yarıyor ve geçici çözüm olarak düşünülebilir. Geçici çözüm ilk örneğim, diğer html etiketleriyle çalıştığı için değil, nesne ile çalışır. Ayrıca, bu işler: 'var $ test = $ (" "); $ test = $ ("gövde") ekle ($ test); ... ve bunu yapma: 'var $ test = $ (" "); $ ("body"). Ekleme ($ test); ... Oldukça garip olan –

0

Güncelleme:
Sonraki İlk tamamen yanlış olduğunu ancak bu nesne etiketi tıklayarak için çalışmak gibi

<script src="//code.jquery.com/jquery-1.11.0.min.js"></script> 

<script> 
$(document).on('click', 'object', function(event) { 
    console.log("jquery test handler");}); 
</script> 
<object width="400" height="400">Object</object> 

önemli bir parçasıdır $(document)
Güncelleme 2: konuyla Daha alakalı kod tetiği kullanarak ve özel olay

<script src="//code.jquery.com/jquery-1.11.0.min.js"></script> 

<object>Object</object> 
<script> 
$(document).on('test', 'object', function(event) { 
    console.log("jquery test handler");}); 
$('object').trigger('test'); 
</script> 
İlgili konular