在我的应用程序中,我有一个iframe,我想让它访问一些功能,这些功能会改变iframe之外的应用程序状态。此功能必须由iframe内部或外部的keydown
事件触发。
在iframe中,我有以下代码:
window.init = function (api) {
api.bind(document);
};
外部应用程序执行类似的操作:
iframe.contentWindow.init({
bind: function (element) {
$(element).bind('keydown', function () {
debugger;
});
}
});
有了这个,init
被正确调用,但永远不会调用keydown
事件处理程序。我究竟做错了什么?
答案 0 :(得分:4)
如果您尝试以这种方式绑定事件:
$(element).bind('keydown', function () {
alert("hello");
});
jquery将尝试在父window
中遍历您的元素,但如果您执行以下操作,您的问题将得到解决:
$(iframe.contentWindow.document.body).find(element).bind('keydown', function () {
alert("hello");
});
答案 1 :(得分:0)
问题是iframe的某些部分已经附加了一个keydown
处理程序,它停止事件的传播,阻止事件到达文档并阻止调用处理程序。实际绑定没有错。