Вставить, Отложить, Прототип и Добавить элементы - PullRequest
0 голосов
/ 30 октября 2009

Это может быть более общий вопрос о браузере / javascript, чем вопрос о конкретном прототипе, но я подумал, что лучше задать его здесь, потому что вы все, как правило, действительно понимаете javascript и браузеры в тоннах деталей. Так что здесь идет.

Если я выполню следующий код:

HTML:

Javascript:

$('area').insert({bottom: "<div id="inserted"></div>"});

var count = 0;
var f = function() {
      if ($('inserted') == null) {
            console.log("not there");
            count++;
            if (count > 50) {
                  $('area'.insert({bottom: "<div id="inserted"></div>"});
                  count = 0;
            }
            f.defer();
      } else {
        console.log("there");
     }
};

f();

Результат:

Большую часть времени это просто показывает:

there

но иногда это делает

not there
not there
not there
there

Я предполагаю, потому что вставка - это то, что ставится в очередь, и браузер затем вставляет узлы в DOM в своем следующем цикле событий. Я знаю, что webkit является однопоточным, так что это имеет смысл, что иногда его там нет, а потом он попадает туда, так что на самом деле, я думаю, мне нужно подождать, пока он там, прежде чем я смогу сделать «следующее» на этом вставленном узле. А как насчет Firefox и IE? Они все однопоточные одинаково? Что происходит в Chrome?

Иногда я вижу следующее, что действительно касается меня:

not there
not there
... 50 times
not there
there

Это происходит очень часто в веб-наборе (Mac OS) и в веб-наборе iPhone, и я могу довольно легко воспроизвести его. Я построил что-то простое, что сделает это, но все это кажется мне немного сумасшедшим, потому что когда я смотрю на код других, они даже не принимают это во внимание. Они никогда не будут отображаться для элементов DOM при вставке текста HTML в элемент DOM.

Любые ответы / предложения будут очень полезны.

Киран

Ответы [ 2 ]

1 голос
/ 08 декабря 2009

Все это выполняется после dom: загружен, поэтому проблема не в том, что dom не загружен, а в том, что иногда, даже после загрузки, контент не всегда отображается. После более подробного изучения я обнаружил, что это происходит в браузере iphone safari, но не в настольных версиях. Это может быть просто проблемой времени. Спасибо, что нашли время ответить на вопросы.

0 голосов
/ 07 декабря 2009

Полагаю, вопрос Фабьена правильно понял: просто дождитесь загрузки DOM document.observe("dom:loaded", f);

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