2010-11-17 59 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

相关问题