Сделайте, чтобы iframe слушал то же событие, что и родительский, и синхронизировал, используя jquery - PullRequest
0 голосов
/ 06 сентября 2011

У меня есть два iframe на html-странице в одном домене

<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>

Я дал событие click для всех тегов на веб-странице внутри iframe

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

«Путь» в событии click указывает путь к нажатому тегу (например, html> body> div # bar> ul # abc.def.ghi> li # foo). GetFrameElement () возвращает кадр, по которому щелкают. Теперь я хочу использовать этот путь и вызвать событие click в другом iframe

Я определил функцию 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, используя путь

Событие click не вызывается внутри функции sendevent, но я получаю путь к родительскому элементу, по которому щелкнул iframe, когда я выполняю console.log (ahash .path) внутри функции sendevent. Как я могу заставить этот метод работать или что-то подобное в этом роде. Пожалуйста, предложите мне какое-нибудь решение, как это сделать.

1 Ответ

0 голосов
/ 08 сентября 2011

Вы не можете переходить по ссылкам, используя $("a").trigger("click"). Вы можете использовать location.href = $("a").attr("href"). Если вы просто пытаетесь перейти к одному и тому же URL в обоих кадрах, не беспокойтесь о .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();
    });
});
...