2014-12-05 18 views
6

Dường như trigger/on jquery events cả standard và custom đều không hoạt động trên thẻ object.Sự kiện không hoạt động trên thẻ đối tượng html5

này không hoạt động:

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

Trong khi nó hoạt động với các thẻ khác html (thử div, video, vv).

Vanilla js giải pháp hoạt động:

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
Các xét nghiệm: http://codepen.io/anon/pen/dPGoJg


Câu hỏi:

  1. Tôi chỉ có một người có lỗi này hay tôi làm điều gì sai?
  2. Đây có phải là lỗi jQuery hay hành vi được mong đợi không?
  3. Bất kỳ cách giải quyết nào (đặc biệt là cho các sự kiện tùy chỉnh ngoài việc sử dụng phần tử khác)?

Trả lời

1

Ví dụ đầu tiên của bạn không hoạt động vì phần tử chưa được thêm vào DOM.

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

Bạn có thể sử dụng các hàm JQuery thay thế để thêm phần tử.

+1

Điều này thực sự hiệu quả và có thể được coi là giải pháp thay thế. Workaround vì ví dụ đầu tiên của tôi làm việc với các thẻ html khác, nhưng không phải là đối tượng. Ngoài ra, công trình này hoạt động: 'var $ test = $ (" "); $ test = $ ("body"). Chắp thêm ($ test); ... ' và điều này không: ' var $ test = $ (""); $ ("body"). Chắp thêm ($ test); ... ' Điều này khá lạ –

0

Cập nhật:
trước gửi bài là hoàn toàn sai tuy nhiên điều này dường như làm việc cho cách nhấp vào thẻ đối tượng

<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> 

Phần quan trọng là $(document)
Cập nhật 2: Mã More liên quan đến vấn đề sử dụng kích hoạt và sự kiện tùy chỉnh

<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> 
Các vấn đề liên quan