2010-11-29 18 views
0

簡單地說,我在中繼器內部有一個錨點,點擊javascript函數後會觸發,它將Div的innerHTML設置爲某些內容。如何使用javascript訪問中繼器內的Div

在中繼器外面試試這個工作! 但如果我試圖在中繼器的項目模板中實現相同的代碼,它將無法工作!

注意:我想我需要訪問中繼器,然後訪問裏面的錨!但我不知道該怎麼辦呢

爲了進一步說明:

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

好的...讓我們重新開始。

有這樣的中繼器代碼:

<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,你應該能夠理解每一行正在做 - 隨時問,如果你不知道。 :)

注意,你必須把在PersonalInfo DIV的個人信息提前,而不是將它傳遞給函數的 - 功能將得到指針的被點擊鏈接。

3

這是因爲id是唯一的。使用getElementsByName或其類名(例如jQuery)選擇元素。

+0

+1。正確答案。 – jwueller 2010-11-29 12:32:55

+0

好吧,我想訪問一個特定的錨..所以我指定它的ID! 是不是更好,更直接? – lKashef 2010-11-29 12:43:32

+1

@lKashef:您無法多次使用ID。它在整個文檔中必須是唯一的。究竟錨定什麼意思?如果你有多個,它應該跳到哪一個? – 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(); 
    } 
} 

這將「自動點擊」所有的鏈接,您可以檢查ID或其他東西以模仿中繼器中特定鏈接的點擊。

相關問題