2010-11-29 3 views
0

Просто у меня есть якорь внутри ретранслятора, который запускает нажатие на функцию javascript, которая устанавливает innerHTML Div в некоторый контент.Как получить доступ к Div внутри ретранслятора с помощью javascript

пробующий это снаружи ретранслятор действительно работал! , но если я попытался реализовать тот же код в шаблоне элемента ретранслятора, это не сработает!

ПРИМЕЧАНИЕ: Я думаю, что мне нужно получить доступ к ретранслятору сначала, а затем получить доступ к якорю внутри него! но я не знаю, как сделать это

Для дополнительной иллюстрации:

JavaScript Функция:

function show(ele, content) { 
    var srcElement = document.getElementById(ele); 
    if (srcElement != null) { 
     srcElement.innerHTML = content; 
    } 
} 

код ретранслятора:

<asp:Repeater ID="Repeater1" runat="server" > 
    <ItemTemplate> 
     Name : <%# Eval("name")%> 
     <DIV ID= "PersonalInfo1" runat="server"></DIV> 
     <A id="A1" href="#" runat="server" onclick="show('PersonalInfo1','Address : ')">More...</A> 
    </ItemTemplate> 
</asp:Repeater> 

PS: посланной КОД ISN «РАБОТАЕМ В ПОВТОРИТЕЛЕ!

ответ

1

OK ... давайте начнем сначала.

Есть такой код ретранслятора:

<asp:Repeater ID="Repeater1" runat="server" > 
    <ItemTemplate> 
     <div> 
      Name : <%# Eval("name")%> 
      <div id="Address" runat="server" style="display: none;"><%# Eval("address")%></div> 
      <div id="Interests" runat="server" style="display: none;"><%# Eval("interests")%></div> 
      <a id="A1" href="#" runat="server" onclick="return show(this, 'Address');">Show address</a> 
      <a id="A2" href="#" runat="server" onclick="return show(this, 'Interests');">Show interests</a> 
     </div> 
    </ItemTemplate> 
</asp:Repeater> 

Тогда такой JavaScript код:

function show(oLink, targetDivID) { 
    var arrDIVs = oLink.parentNode.getElementsByTagName("div"); 
    for (var i = 0; i < arrDIVs.length; i++) { 
     var oCurDiv = arrDIVs[i]; 
     if (oCurDiv.id.indexOf(targetDivID) >= 0) { 
      var blnHidden = (oCurDiv.style.display == "none"); 
      oCurDiv.style.display = (blnHidden) ? "block" : "none"; 
      //oLink.innerHTML = (blnHidden) ? "Less..." : "More..."; 
     } 
    } 
    return false; 
} 

Это будет искать "брат" DIV элемента щелкнули ссылку, и показать или скрыть его.

Код как можно более простой, используя чистый JavaScript, вы должны понимать, что делает каждая строка - не стесняйтесь спрашивать, нет ли у вас этого. :)

Обратите внимание, что перед тем, как передавать его в функцию, вам необходимо поместить персональную информацию в личный кабинет, а функция будет получать указатель на указанную ссылку.

3

Это потому, что идентификаторы уникальны. Выберите элементы, используя getElementsByName или их имя класса, например jQuery.

+0

+1. Правильный ответ. – jwueller 2010-11-29 12:32:55

+0

ну, я хочу получить доступ к определенному якорю .. я указал его ID! не так ли лучше и прямо? – lKashef 2010-11-29 12:43:32

+1

@lKashef: вы не можете использовать идентификатор несколько раз. Он должен быть уникальным во всем документе. Что именно вы подразумеваете под якорем? Если у вас несколько, к которым нужно перейти? – jwueller 2010-11-29 12:46:54

0

Да, вам нужно перебрать все соответствующие ссылки. Решение, которые включают минимальное изменение кода добавляет класс к ссылкам затем проверить для этого класса:

<A id="A1" href="#" runat="server" class="RepeaterLink" ...> 

А потом в JavaScript:

var arrLinks = document.getElementsByTagName("a"); 
for (var i = 0; i < arrLinks.length; i++) { 
    var oLink = arrLinks[i]; 
    if (oLink.className == "RepeaterLink") { 
     //found link inside repeater.. 
     oLink.click(); 
    } 
} 

Это будет «автоматически нажмите кнопку» все ссылки, вы можете проверить идентификатор или что-то еще, чтобы имитировать клик определенной ссылки в ретрансляторе.

Смежные вопросы