2012-06-18 24 views
15

Tôi cần liên kết với sự kiện (giả sử click trên tùy ý <input>) bên trong khung nội tuyến được tạo động sau khi người dùng thực hiện một hành động nhất định. Mã mà gắn thêm iframe và mã bên trong iframe không phải của tôi và tôi không thể thay đổi nó theo bất kỳ cách nào (đây là bảng quản trị CMS).Liên kết với các sự kiện bên trong khung nội tuyến được tạo động

Tôi có thể nghe các sự kiện bằng cách sử dụng jQuery 1.6 (một lần nữa, đây không phải là lựa chọn của tôi, tôi bị kẹt với nó). Tôi nghĩ delegate() có thể là những gì tôi muốn:

$('body').delegate('iframe input', 'click', function(e) { 
    alert('bingo?'); 
}); 

Nhưng ở trên không cảnh báo khi một đầu vào được nhấp. Tuy nhiên, dưới đây, hoạt động như mong đợi:

$('body').delegate('input', 'click', function(e) { 
    alert('bingo?'); 
}); 

Nhưng điều này nằm ngoài khung nội tuyến.

Rõ ràng là src của iframe chỉ đến cùng một tên miền.

Bất kỳ trợ giúp nào hoặc chỉ là một sản phẩm đúng hướng được đánh giá cao.

Trả lời

17

'iframe input' này không chọn input yếu tố bên trong iframe.

Bạn có thể ràng buộc các sự kiện như

$('body iframe').contents().find('input').bind('click',function(e) { 
    alert('bingo?'); 
}); 

Tôi nghĩ Bạn cũng có thể sử dụng giống như

$('body iframe').contents().find('body').delegate('input','click',function(e) { 
    alert('bingo?'); 
}); 

Để phát hiện nếu các iframe đã được nạp đầy đủ, sử dụng phương pháp mô tả trong câu trả lời này https://stackoverflow.com/a/5788723/344304

Thêm vào tài liệu chính/phụ huynh:

function iframeLoaded() { 
    $('body iframe').contents().find('input').bind('click',function(e) { 
     alert('bingo?'); 
    }); 
} 

Thêm Trong tài liệu iframe:

window.onload = function() { 
    parent.iframeLoaded(); 
} 

Hoặc sử dụng

$('body iframe').load(function(){ 
    $('body iframe').contents().find('input').bind('click',function(e) { 
      alert('bingo?'); 
     }); 
}); 
+0

Có, nhưng 'trên()' đã được giới thiệu trong 1.7. Làm thế nào tôi có thể làm điều đó trong 1.6? – bububaba

+0

Mã được cập nhật, sẽ hoạt động nếu bạn không thêm yếu tố đầu vào vào khung nội tuyến. –

+0

Cảm ơn. Làm thế nào tôi có thể đảm bảo rằng '$ (" khung nội tuyến cơ thể "). Nội dung()' được chạy sau khi khung nội tuyến được nạp đầy đủ? Hay tôi không cần phải chắc chắn? – bububaba

Các vấn đề liên quan