2010-11-17 66 views
4

在我的應用程序中,我有一個iframe,我想讓它訪問某些功能,這些功能會改變iframe之外的應用程序的狀態。此功能必須由iframe內部或外部的​​事件觸發。將事件附加到父代碼中的iframe元素

在iframe中,我有以下代碼:

window.init = function (api) { 
    api.bind(document); 
}; 

和外部應用程序確實是這樣的:

iframe.contentWindow.init({ 
    bind: function (element) { 
     $(element).bind('keydown', function() { 
      debugger; 
     }); 
    } 
}); 

有了這個,init正確調用,但​​事件處理程序從未打過電話我究竟做錯了什麼?

回答

0

問題在於iframe的某些部分已經附加了一個處理程序,該程序停止傳播事件,從而阻止事件到達文檔並阻止處理程序被調用。沒有什麼是錯誤的實際綁定。

4

如果試圖以這種方式綁定事件:

$(element).bind('keydown', function() { 
     alert("hello"); 
    }); 

jQuery將嘗試穿越你的元素在父window,但如果這樣做以下您的問題將得到解決:

$(iframe.contentWindow.document.body).find(element).bind('keydown', function() { 
     alert("hello"); 
    }); 
+1

只需添加:'$(iframe.contentWindow.document.body)'可以替換爲'$(iframe).contents()'。 – PleaseStand 2010-11-17 21:38:18

+1

這在Chrome中不起作用。 – Gullbyrd 2012-04-21 23:26:07

+0

在Chrome中也無法綁定'mouseup'事件。 – cactis 2013-01-16 13:53:30

相關問題