как можно отличить один вызов $ (document) .ready () от другого? - PullRequest
3 голосов
/ 13 сентября 2011

Я создаю iframe динамически для использования в качестве места для выполнения вызова API на основе форм.

$('<iframe>').attr({
    name : "secret_sending_iframe",
    src : "#",
    style : "visibility:hidden; width:0px; height:0px;"
    }).appendTo("#recordingControl");

это побочный эффект, из-за которого снова запускается мой $ (document) .ready (). Это понятно, так как он говорит мне, что мой iframe готов, но теперь мне нужно отличить исходный документ от готового нового документа. Есть ли какой-то способ сказать, что это iframe, который только что стал готовым, кроме проверки на отрицательное существование iframe, чтобы сказать, что это первый вызов .ready ()?

Кстати, тестирование $ ("iframe") в вызове $ (document) .ready () вернуло [], чего я не ожидал. Поэтому лучшим решением для меня было использовать window.location.href, см. Ниже ...

Ответы [ 2 ]

3 голосов
/ 13 сентября 2011

Каждый кадр имеет свой отдельный контекст javascript и свой отдельный $(document).ready(). Итак, я не думаю, что вы видите, что один и тот же $(document).ready() вызывается более одного раза, если у вас нет нескольких вызовов на $(document).ready() в одном и том же документе. В противном случае каждый раз, когда он будет вызываться, будет другой документ.

Если у вас есть идентичный код и вам нужно знать, какой из них вызывается, вы всегда можете посмотреть на объект window.location, чтобы увидеть, на какой странице / фрейме вы находитесь. Чтобы понять вашу ситуацию, я бы предложил добавить это каждому:

console.log(window.location.href);

И тогда вы можете выделить, что есть что.

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

Обычный способ справиться с этим - установить глобальную переменную в JS перед функцией $ (document) .ready () и проверить ее в пределах:

var run_doc_ready = 0;

$(document).ready(function(){
    ...
    if (!run_doc_ready) {
       ...
       run_doc_ready = 1;
    }
    ...
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...