从iframe内部调用父jquery函数?

时间:2013-02-16 21:17:38

标签: javascript jquery

假设我有这个页面“index.php”,其中我有一个调用弹出框的链接:

<a href="#" id="signinlink">Sign in</a>

jquery函数是:

<script type="text/javascript" charset="utf-8">
    jQuery(function() {
        function launch() {
             jQuery('#sign_up').lightbox_me({centered: true, onLoad: function() { jQuery('#sign_up').find('input:first').focus()}});
        }
        jQuery('#signinlink').click(function(e) {
            jQuery("#sign_up").lightbox_me({centered: true, onLoad: function() {
                jQuery("#sign_up").find("input:first").focus();
            }
        });
    });
</script>

iframe如何调用此函数?

(*从父页面“index.php”调用iframe) 我想我必须添加一个链接

window.parent.callme();
但是怎么样?请帮忙!

2 个答案:

答案 0 :(得分:1)

首先 - 如果iframe与登录表单有关 - 它应该自己发送自己的内容。代码应该在那里,而不是在父框架中调用。

无论如何,你的问题缺少一些关于你想要做什么的细节。

要从父母访问内容,请执行以下操作:

window.parent.functionname()而非functionname()

所以

$(document).find(...)将成为window.parent.$(window.parent.document).find(...)

要从父级访问iframe,您需要获取iframe DOM节点的contentDocument。

这也很有用:How to expose IFrame's DOM using jQuery?

如果您可以更清楚地提出问题,可能会向您展示一个与您所拥有的代码相关的代码示例。

答案 1 :(得分:0)

这对我有用 - 但只有当我将jQuery设置为1.8或添加jQuery migrate时,因为lightbox-me需要在1.8中弃用并在1.9浏览器检测代码中删除

DEMO

iframe中的

(假设iFrame中没有jQuery):

<a id="parentsignin" href="#">Signup</a>
使用

window.onload=function() {
  document.getElementById("parentsignin").onclick=function() {
    parent.document.getElementById('signinlink').click();
    return false;
  }
}

实际上,您可能希望在父级中执行此操作 - 请注意我使用preventDefault取消链接本身并重用代码:

function launch() {
  $('#sign_up').lightbox_me({ 
    centered: true, 
    onLoad: function() { 
      $('#sign_up').find('input:first').focus();
    }
  });
}


$(function() {
  $('#signinlink').click(function(e) {
    e.preventDefault(); // stop the link from being followed
    launch(); 
  });
});