将事件附加到父代码中的iframe元素

时间:2010-11-17 20:19:44

标签: javascript jquery dom javascript-events

在我的应用程序中,我有一个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事件处理程序。我究竟做错了什么?

2 个答案:

答案 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处理程序,它停止事件的传播,阻止事件到达文档并阻止调用处理程序。实际绑定没有错。