Как применить переключатель прототипа к содержимому, загруженному через JSON, только проблема IE - PullRequest
1 голос
/ 28 мая 2009

Я использую PHP и JavaScript через прототип. у меня есть страница с комментариями, которая открыта по умолчанию через вызов javascript к данным PHP-файла, возвращенным через JSON, в БД извлекаются только родительские комментарии. (короче говоря, из базы данных извлекаются только родительские комментарии) затем родители загружаются и форматируются для отображения на странице со ссылкой для получения и отображения своих дочерних комментариев, пример ссылки:

<span id="moreparent8351" onclick="insertChildDiv('parent8351')">1 Replies and more</span>

ссылка span выше вызывает функцию javascript "insertChildDiv ()", которая в основном получает комментарии с parent_id = parent8351, также используя файл PHP, который возвращает данные через JSON в javascript, который динамически вставляет эти дочерние комментарии, вложенные в родительский комментарий. тогда указанная выше ссылка span с использованием прототипа преобразуется в:

<span id="moreparent8351" onclick="$('childparent8351').toggle()">1 Replies and more</span>

Теперь вот проблема, этот вставленный контент внутри этого div с id = childparent8351 не будет отвечать на переключение скрытия / показа ТОЛЬКО в IE v6, v7 и v8. другие браузеры работают нормально. похоже, что IE не может применить переключатель скрытия / показа к динамически вставляемому контенту. Я попытался жестко закодировать вставленный контент, который я вижу в fogbugz на странице, и снова протестировать его в IE, угадайте, что? Тумблер работает!

Я не хочу получать все комментарии как родительских, так и дочерних, а затем скрывать дочерние комментарии, что является пустой тратой ресурсов на то, что, по нашему мнению, не важно или важно для чтения пользователями.

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

1 Ответ

0 голосов
/ 28 мая 2009

Element.toggle() должно нормально работать с динамически генерируемым контентом . Скорее всего, ваша проблема заключается в методе , который вы используете для создания этого контента .

Вы заявили:

тогда ссылка на span выше, используя Прототип превращается в:

<span id="moreparent8351" onclick="$('childparent8351').toggle()">1 Replies and more</span>

Как именно вы меняете атрибут onclick элемента span?

Прежде всего, я бы определенно не рекомендовал менять событие onclick на лету. Вероятно, лучше использовать одну функцию, которая проверяет текущее состояние того, что вы пытаетесь сделать, и выполняет соответствующий код.

Не «трансформируйте» свой элемент span, включая атрибут onclick, используя innerHTML. Скорее всего, DOM все еще пытается сослаться на функцию, которую вы только что удалили. Если вы вообще обновляете свой атрибут onclick, сделайте это так:

var element = $('moreparent8351');
// this automatically removes previous onclick handlers set in this manner
element.onclick = function() { // do stuff };

... или, если вы хотите, прототип:

var element = $('moreparent8351');
// OPTIONAL: remove previous handler, if set
element.stopObserving('click', my_cool_function());
// attach  new handler
element.observe('click', function() { // do stuff });
...