使iframe监听与父级相同的事件并使用jquery进行同步

时间:2011-09-06 06:13:35

标签: javascript jquery iframe click

我在同一个域的html页面中有两个iframe

<body>
  <table border="1" width="100%" height="100%">
    <tr>
      <th><iframe class="isiframe" width="100%" height="100%" src="/example"></iframe></th>
      <th><iframe class="isiframe" width="100%" height="100%" src="/example"></iframe></th>
    </tr>
  </table>
</body>

我已经为iframe内的网页中的所有标记提供了点击事件

$('a').bind('click', function(e){
      var path = $(this).getPath();
      var ahash={
                   'path':path
                };
      if (getFrameElement())
         window.parent.document.Aaddevent(e, ahash);
});

点击事件中的“路径”给出了点击标签的路径(例如,html&gt; body&gt; div#bar&gt; ul#abc.def.ghi&gt; li#foo)。 getFrameElement()返回单击的框架。现在我想要做的是使用此路径并触发其他iframe中的click事件

我已定义了sendevent函数,其他iframe获取父iframe的事件,并触发与parent相同的事件并进行同步。

document.sendevent=function(e, ahash){
    var iframes= parent.document.getElementsByTagName('iframe');
    for (var i= iframes.length; i--;) {
        var iframe= iframes[i];
        if(iframe){
                    $(ahash.path).trigger('click');
                  }
    }
};

我想这样做并使iframe工作,按照父iframe点击元素的路径,然后触发click事件以使其他iframe使用路径与父iframe同步

在sendevent函数中没有触发click事件,但是当我在sendevent函数中执行console.log(ahash .path)时,我得到了父iframe点击元素的路径。我怎样才能使这种方法起作用或类似的东西。请建议我解决方法如何做到这一点。

1 个答案:

答案 0 :(得分:0)

您无法使用$("a").trigger("click")关注链接。您可以使用location.href = $("a").attr("href")。如果您只想尝试导航到两个帧中的相同网址,请不要打扰.getPath(),只需传递href即可。在您的父页面中,使用它来绑定第一帧中的链接以导航第二帧:

$("iframe:first").contents().find("a[href]").click(function() {
    $("iframe:last", top.document)[0].contentWindow.location.href = this.href;
});

编辑:在IE和更新版本的FireFox和Opera中,您可以使用本机DOM方法.click()来模拟链接上的实际点击。 Chrome目前尚不支持,但最终可能会支持。要使用.getPath()查找并单击该链接,请在父页面中尝试:

$("iframe:first").load(function() {
    $(this).contents().find("a[href]").click(function() {
        $("iframe:last", top.document).contents().find($(this.getPath())[0].click();
    });
});