RmcbainTheThird Ответов: 1

Доступ к элементу на странице содержимого


У меня есть функция javascript на моей странице контента, чтобы скрыть все дивы и показать тот, который был передан. Каждый раз, когда скрипт выполняется, он возвращает null при попытке получить элемент через document.getElementById.

<div id="Tab2" runat="server"  /div>


Я попробовал два разных способа построить идентификатор div, и ни один из них не работает.
function openLink(evt, animName) {
     var i;
     var x = document.getElementsByClassName("diy");
     for (i = 0; i < x.length; i++) {
        x[i].style.display = "none";
     }
     var divName = "ctl00_MainContent_" + animName;
     var tst = document.getElementById(divName);
     tst.style.display = "block";
     switch (animName) {
        case "Tab2":
           var el2 = document.getElementById("<%=Tab2.ClientID%>");
           el2.style.display = "block";
           break;
        case "Tab3":
           var el3 = document.getElementById("<%=Tab3.ClientID%>");
           el3.style.display = "block";
           break;
     }


  }


Все мысли

Что я уже пробовал:

("<%=Tab2.ClientID%>

tl00_MainContent_" + animName;

RmcbainTheThird

Я посмотрел на визуализированный код, и идентификатор соответствует тому, что я строю в javascript. и идентификаторы, которые я создаю в javascript, соответствуют визуализированному html. самое неприятное

F-ES Sitecore

Убедитесь, что вы не вызываете openLink до того, как вкладки будут отображаться на странице. Если вы сделаете что-то вроде

<script>openlink(e, "Tab2");...

<div id="Tab2" ...

затем javascript запускается сразу же, но div еще не был загружен в DOM. Поэтому убедитесь, что ваш сценарий всегда находится ниже элементов, на которые они ссылаются.

RmcbainTheThird

Код выполняется по щелчку кнопки, поэтому все визуализируется до выполнения метода
&ЛТ;АСП:класс button="tabdiy tablink tabwidth" CommandArgument="2" OnClientClick="оно(событие, 'Таб2')" идентификатор="btnDIY2" атрибут runat="сервер"и GT;

Dennis E White

вы пробовали запускать код в чем-то вроде инструментов разработчика chrome?

RmcbainTheThird

Да у меня есть и GetelementbyID всегда возвращает null даже если я вижу имя элемента в инструментах разработчика и оно совпадает с тем что есть в методе javascript

Dennis E White

поэтому, если вы правильно форматируете свой вызов getElementById(..) и запускаете его из инструментов разработчика, но он возвращает null, то проблема, скорее всего, будет одной из следующих:

- элемент, который вы ищете, не был должным образом закрыт.
- у вас есть несколько элементов, разделяющих один и тот же идентификатор.

RmcbainTheThird

Ну и перепроверил обе мысли, все хорошо. и кроме того, пытаясь заставить это работать, я добавил событие в код, чтобы сделать то же самое, и никаких проблем с поиском дивов( я уже упоминал, что ненавижу javascript)

для (int idx = 1; idx <= 7; ++idx)
{
HtmlControl div = cp.FindControl(divName + idx) как HtmlControl;
Кнопка btn = (кнопка) cp.FindControl(btnName + idx);

если (idx != id)
{
btn.CssClass = "кнопка tabdiy";
див.Видна = ложь;
}
еще
{
btn.CssClass = "tabdiyactive";
див.Видимое = истинное;
}
}

Dennis E White

не видя на самом деле всего, я не могу помочь больше. нет никаких причин для getElementById() возвращать null, если все там правильно.

1 Ответов

Рейтинг:
2

Dennis E White

после рендеринга страницы вы смотрели на ее вывод в браузере?

<%= >
это инкапсуляция для серверного кода, которая помогает в рендеринге страницы. таким образом, вы должны иметь возможность просматривать выходные данные в браузере, который вы используете.

Я бы проверил источник HTML в браузере и посмотрел, что вы получаете в качестве первого шага.