Как заставить IFRAME прослушивать событие click родительского iframe и использовать путь элемента clicked в родительском iframe - PullRequest
1 голос
/ 07 сентября 2011

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

<iframe id="i1" width="100%" height="100%" src="/wordpress"></iframe></th>
<iframe id="i2" width="100%" height="100%" src="/wordpress"></iframe></th>  

Я дал событие click для тега внутри iframe, откуда я получаю путь к элементу clicked вродительский iframe

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

Теперь я хочу использовать этот путь и вызвать событие click в другом iframe, чтобы оба iframe имели одинаковый вид страницы.Я использую путь во втором iframe из события click родительского iframe следующим образом:

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

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что я получаю предупреждение о том, что событие click вызывается во второмiframe, но он не загружает путь родительского iframe и не открывает тот же контент, что и родительский iframe.

Я не понимаю, где я делаю ошибку.Можно ли сделать так, как я пытаюсь, чтобы это произошло?Если да, то может ли кто-нибудь подсказать мне, почему это происходит, и что мне нужно сделать, чтобы другой iframe открывал содержимое, используя путь родительского iframe из события click в родительском iframe.

1 Ответ

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

Вы делаете много циклов, и если JQuery сделает для вас автоматически. Если я что-то упустил. Смотрите мои комментарии в каждой строке:

var iframes= parent.document.getElementsByTagName('iframe');  // why not use jQuery?
for (var i= iframes.length; i--;) { // why not use jQuery here?
    var iframe= iframes[i]; 
    if($(iframe)) { // always true - even an empty jQuery object returns true
        // where does ahash come from? 
        if (ahash.path!=undefined) { // Why not do this check outside the loop?
            $(iframe).click(function(e) { 
                $(this).find(ahash.path).trigger('click'); // this will do nothing
                    // $(this).find() will be empty - your iframe has no children
                    // you want $(this).contents().find();
            }).click();                // why immediately call click and then unbind?
            $(iframe).unbind('click'); // why not just call the code?
        } // is this brace in the right spot?
    // missing brace
// missing brace

Я бы переписал это так:

$("iframe", parent.document).contents().find(ahash.path).click();

сломан, то есть:

$("iframe", parent.document) // get all of the iframes in the parent document
    .contents()              // get the content documents of those frames
    .find(ahash.path)        // find the elements matching the ahash.path in each
                             // of the frames' content documents
    .click();                // trigger a click on the matching elements in each frame

Это то, что вы пытаетесь сделать? Если это так, то я считаю, что ваша проблема в том, что вы не звоните .contents() на свой iframe до вызова .find().

Редактировать: Обратите внимание, что вы не можете перейти к URL-адресу, вызвав $("a#myLink").click(). Вам придется манипулировать location.href вместо этого. Однако в IE и более новых версиях FireFox и Opera вы можете сделать это, вызвав собственный метод DOM элемента .click(), прямо так: $("a#myLink")[0].click(). Поскольку это часть HTML5, вы, вероятно, вскоре сможете сделать это в Chrome.

Вот демонстрация, демонстрирующая поведение метода jQuery click() для ссылок: http://jsfiddle.net/gilly3/C48mv/1/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...