2010-11-29 30 views
0

単に、divのinnerHTMLをコンテンツに設定するjavascript関数をクリックするとリピーター内にアンカーがあります。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:投稿さCODE 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を使用してできるだけ単純です。各行が何をしているのか理解できるはずです。 :)

PersonalInfo divに個人情報を渡すのではなく、関数に渡す代わりに、その情報を関数に渡す必要があります。関数はクリックされたリンクへのポインタを取得します。

+0

http://jsfiddle.net/TEFnh/ライブサンプル(静的HTML)を見ることができます。また、そこにJSコードを混乱させることもできます。 :) –

+0

これは正確に私が実装したかったことを否定することはできません! しかし、正直言って私はそれを手に入れません! まず、Anchorオブジェクトを関数に送信した後、「parentNode」プロパティを使用しました。これはまさに何ですか? getByTagName関数を使用してアンカーを単純に検索できました。右 ? – lKashef

+0

ちょうど私が発見したバグ!それ以上クリックすると、すべてのDIVの情報が表示されます。クリックを少なくすると、すべてのdivが非表示になります。 もちろん、指定したアイテムのみのdivを表示/非表示にすることができますように! – lKashef

3

これは、idが一意であるためです。 getElementsByNameを使用してエレメントを選択するか、クラス名(例:jQuery)を使用してエレメントを選択します。

+0

+1。正解。 – jwueller

+0

まあ、私は特定のアンカーにアクセスしたいと思っています。 はそれほど直接的ではありませんか? – lKashef

+1

@lKashef:IDは複数回使用できません。ドキュメント全体で一意でなければなりません。あなたはアンカーによって正確に何を意味しますか?あなたは複数のものを持っている場合、どちらにジャンプする必要がありますか? – jwueller

0

はい、すべての関連リンクを繰り返す必要があります。コードの最小限の変更を伴う解決策はリンクにクラスを追加して、このクラスをチェック:

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

そして:

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などをチェックしてください。

+1

ちなみに、jQueryを使用すると、JavaScriptのコードを短くすることができ、ブラウザの安全性を高めることができます。あなたに電話ですよ。 :) –

+0

実際、私は(Javascript、JQuery、Ajax)の違いについて研究していましたが、私はそれぞれの定義を知っていますが、どういうものが正確に使われているのか分かりません。 もちろん、JQueryを使うのが良いと思うのであれば、JQueryの使用を検討したいと思いますが、ガイドやポインタが役に立つでしょう(Y)! – lKashef

+0

@lKashef - jQueryはJavaScriptのライブラリです。jQueryコードファイルへの参照を追加するだけで済みます。ケーキを考えてみましょう:ケーキを自分で焼く(純粋なJavaScript)か、他の誰かが作ったケーキを店内で買うことができます。 (jQuery) –

関連する問題