Форум » Вопросы по настройке внешнего вида и управлению » Перестал работать скрипт » Ответить

Перестал работать скрипт

Feelings: Добрый день. На форуме был прописан в настройках сприпт, скрывавший функцию "спасибо" в сообщениях (нам она не нужна, из-за неё идёт перекос дизайна). Всё скрывало исправно, а сейчас функция почему-то появилась вновь. Скрипт стоит в HTML-низ: <script> if(work=='1'){ f=document.forms; for(n=0;n<f.length;n++){ if(f[n].target=="spasibo"){ f[n].childNodes[1].childNodes[0].childNodes[0].childNodes[1].style.display="none"; }}} </script> Помогите, пожалуйста, исправить скрипт так, чтобы всё вновь заработало. Форум: http://hpdestiny.forum24.ru/

Ответов - 22, стр: 1 2 All

ТехнОкраТ: Вот эту строчку: if(f[n].target=="spasibo"){ Нужно заменить на эту: if(f[n].target=="gw"){ Скрипт перестал скрывать "Спасибо", потому что поле target в форме, отвечающей за показ и отправку спасиб, теперь содержит значение "gw", а не "spasibo".

Feelings: ТехнОкраТ Заменила. К сожалению "спасибо" из сообщений не пропало.

ТехнОкраТ: Feelings Занятно. У меня работает, а вроде бы всё то же.


Feelings: ТехнОкраТ Засада и как тогда понять в чём проблема?

ТехнОкраТ: Обычно, скрипты, которые что-то меняют в разметке страницы после того, как она была загружена, лучше размещать после закрывающего </HTML> - тогда больше гарантий, что вся объектная модель документа будет доступна скрипту. Что если так и поступить - разместить скрипт после </HTML> в HTML-низу? P.S.: Ещё меня смущает, что в HTML-верхе и HTML-низе в некоторых местах не хватает закрывающих </TD> и </TR> (перед <TR width=1000><TD valign=top> в HTML-верху и перед первым </table> в HTML-низу). А также прямо перед </BODY> стоят лишние </TD></TR></TABLE>.

Feelings: ТехнОкраТ пишет: Обычно, скрипты, которые что-то меняют в разметке страницы после того, как она была загружена, лучше размещать после закрывающего </HTML> - тогда больше гарантий, что вся объектная модель документа будет доступна скрипту. Что если так и поступить - разместить скрипт после </HTML> в HTML-низу? тогда скрипт будет и после </BODY>, хотя, как я поняла из местного раздела скриптов, они должны прописываться до. Тем не менее я попробовала - не помогло. ТехнОкраТ пишет: Ещё меня смущает, что в HTML-верхе и HTML-низе в некоторых местах не хватает закрывающих </TD> и </TR> (перед <TR width=1000><TD valign=top> в HTML-верху и перед первым </table> в HTML-низу). От них зависит ширина таблицы форума. Если закрыть их в HTML-верхе, ширина разъезжается.

Feelings: Самое нелепое, что буквально недавно всё работало прекрасно и исправно. Что сейчас-то вдруг стряслось, в настройки никто не лазил.

ТехнОкраТ: Скопировал разметку с форума к себе - скрипт всё ещё работает %) Что ж не так-то.

Feelings: Скопировала этот скрипт на другой пробный форум с другим дизайном - там тоже не работает

ТехнОкраТ: Отсутствие результата - это пока что тоже результат. Мы выяснили, что браузер ни при чём (в одном и том же браузере на разных форумах скрипт и работает и не работает). Разметка не виновата (потому что, опять же, на разных форумах скрипт и работает и не работает). Давайте проверим, в какой момент скрипт перестаёт работать. Разместите в самом низу HTML-верха: <p id='iTest'>Здесь будет появляться цифра. 1 - значит, скрипт запускается. 2 - значит, выполняется проверка условия режима просмотра темы. 3 - значит, происходит перебор форм. 4 - значит, нужная форма найдена. 5 - значит, ячейка таблицы успешно скрыта.</p> А скрипт в HTML-низу замените следующим: [pre2]<script> PiTest = document.getElementById('iTest'); PiTest.innerHTML = 1; if(work=='1'){ PiTest.innerHTML = 2; f=document.forms; for(n=0;n<f.length;n++){ if(PiTest.innerHTML < 4) {PiTest.innerHTML = 3;} if(f[n].target=="gw"){ PiTest.innerHTML = 4; f[n].childNodes[1].childNodes[0].childNodes[0].childNodes[1].style.display="none"; PiTest.innerHTML = 5; } } } </script>[/pre2] Зайдите на страницу http://hpdestiny.forum24.ru/?1-15-0-00000233-000-60-0#072.001 - и скажите, какую цифру нарисовал скрипт вверху форума под логотипом (и можно всё это дело возвращать, как было).

Feelings: ТехнОкраТ По ссылке нарисовал 4, на основной странице выдал 1

ТехнОкраТ: Отлично. Гостем тоже в теме вижу "4" - значит, не получается скрыть таблицу, т.е. сбоит вот эта строка: [pre2] f[n].childNodes[1].childNodes[0].childNodes[0].childNodes[1].style.display="none"; [/pre2] Как говорил лейтенант Пискунов: "Дело двинулось!" :) Upd.: что если заменить эту строку на: [pre2]f[n].style.display="none";[/pre2] Делает, по сути, то же самое, только скрывает всю форму спасиб.

Feelings: ТехнОкраТ заработало! Спасибо вам огромное)

ТехнОкраТ: Feelings

Feelings: Вынуждена вернуться к данной теме, так как с запозданием поняла, что скрипт скрыл не только «спасибо», но и все подписи целиком, а это в планы не входило

ТехнОкраТ: И правда. Тогда давайте будем переписывать эту злосчастную строку, пока не заработает. Почему-то вчера прямые ссылки на дочерние элементы узла формы приводили к сбою сценария (при этом консоль ошибок моих FireFox и PaleMoon предательски молчит). Попробуйте так: [pre2] f[n].lastChild.firstChild.firstChild.lastChild.style.display='none'; [/pre2] Теперь строка делает то же самое, что и оригинальная, только вместо childNodes[1], ссылающегося на второй дочерний элемент, стоит lastChild, ссылающийся на последний (потому что в рассматриваемой цепочке элементов всего два, и второй будет последним :) ), а вместо childNodes[0] - firstChild, ссылающийся на первый. У меня скрывает.

Feelings: ТехнОкраТ Попробовала. Два разных форума с разными дизайнами упрямо не хотят скрывать "спасибо".(( Подписи вернулись.

ТехнОкраТ: А так? [pre2] f[n].lastChild.tBodies[0].rows[0].cells[1].style.display='none';[/pre2] Теперь здесь уже ссылки на элементы таблицы, которой оформлена форма спасиб. Кстати, можно ссылку на тестовый форум, на котором скрипт тоже отказывается скрывать спасибы?

Feelings: ТехнОкраТ Упрямое спасибо видно и с этими правками скрипта( Конечно: http://hpdestinyproba.unoforum.pro

ТехнОкраТ: Экое колдунство. Получается достучаться до коллекции tbody, вложенной в таблицу, положенную в форму. Дальше - нет. Причём, даже здесь, на ФТП. Что же надо сделать мне на своём форуме, чтобы у меня тоже так стало не работать Upd.: Давайте пойдём другим путём. Если не получается достучаться до части таблицы через форму, поищем её через ссылку "Спасибо: ", которая видна даже гостям. Попробуйте заменить весь скрипт таким: [pre2] <script> if(work=='1'){ f=document.getElementsByTagName('a'); for(n=0;n<f.length;n++){ if(f[n].getAttribute('href').indexOf('#msgid_t') == 0){ f[n].parentNode.style.display='none'; } } } </script> [/pre2]



полная версия страницы