document.getElementById возвращает элемент в Firefox, но не в Chrome - PullRequest
1 голос
/ 14 июля 2011

Я пытаюсь динамически загрузить объект типа coverflow (думаю, что itunes coverflow, но менее навороченный) нажатием кнопки после того, как веб-страница уже загружена. Я динамически создаю список изображений для подачи в javascript для coverflow, который затем загружает их и делает чудо, чтобы он выглядел красиво. Проблема заключается в том, что в Firefox код работает, но в Chrome и т. Д. (Неожиданный сюрприз) JavaScript выдает ошибку, а страница становится пустой из-за ошибки, приведенной ниже. Проблема в этом блоке кода, который пытается захватить элемент dom по id

if (typeof(this.Container) == 'string') { // no node
    var container = document.getElementById(this.Container);
    if (container) {
        this.Container = container;
    } else {
        throw ('ContentFlow ERROR: No element with id \''+this.Container+'\' found!');
        return;
    }
}

В основном хромированный элемент купола не фиксируется приведенным выше кодом, когда он определенно доступен на странице. Я даже набрал document.getElementById("container_name"); в консоли chrome, и он вернул элемент, поэтому я не знаю, почему он не будет работать в файле.

Любые предложения будут оценены

Спасибо

EDIT:

вот HTML-код на странице, который пытается заполнить

<div id="contentFlow" class="cool_ui ContentFlow">
    <p id="coverflow_school_name"></p>
    <div class="loadIndicator"><div class="indicator"></div></div>
    <div class="flow" style="height:240px;"></div>
    <div class="scrollbar">
        <div class="slider"></div>
    </div>
</div>

ОТВЕТИЛ:

Ух ты, хорошо. Я понял. Проблема заключалась в том, как некоторые ресурсы динамически загружались до вызова этого фрагмента кода. Загрузка ресурсов приводила к тому, что страница становилась пустой, поэтому var container = document.getElementById (this.Container); вернуть ноль, следовательно, исключение выдается. Странно было то, что Firefox мог обрабатывать загрузку ресурсов, но Chrome не мог.

Спасибо за помощь

Ответы [ 3 ]

0 голосов
/ 14 июля 2011

Используя JQuery, вы можете просто сказать

if($(this.Container).length){
    //Code goes here
}
else
{
    throw ('ContentFlow ERROR: No element with id \''+this.Container+'\' found!');
    return;
}
0 голосов
/ 14 июля 2011

Я пробовал код в Chrome 12.0.742.112, и он, кажется, работает нормально. Вот ссылка: http://jsfiddle.net/eemYg/.
Полагаю, проблема связана с другой причиной, например this.Container. Вы должны проверить его значение (в Chrome) и посмотреть, имеет ли оно значение, отличное от значения в Firefox.

0 голосов
/ 14 июля 2011

Почему бы вам не использовать jquery?

 $('#container_name')

ОБНОВЛЕНИЕ: при втором чтении, это имя или идентификатор элемента?

Если это имя, тогда используйте

$('[name="container_name"]')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...