2011-07-29 4 views
3

저는이 문제에 대한 두뇌를 깨고 있었고 jQuery가 repeater 안에 배치 할 때 div를 표시하거나 숨기지 않을 이유를 알 수 없습니다.jQuery show/hide가 다른 div 내부에서 div를 움직일 때 작동하지 않습니다.

<div id="EmailForMoreInfo">Hey there!</div> 

내가 보여 /하는 데 사용 숨길 JQuery와 여기에 있습니다 : : 여기/숨기기를 보여주기 위해 노력하고있어 DIV이다

if (event.srcElement && event.srcElement.hash == "#2") { 
    $("#EmailForMoreInfo").show(); 
} else { 
    $("#EmailForMoreInfo").hide(); 
} 

'EmailForMoreInfo'의 배치는 내부에 배치 리피터는 다음 'EmailForMoreInfo'가 중계기의 내부에 배치 할 때

jQuery를 위
<div class="panes"> 
    <asp:Repeater ID="rptProductsCategories" runat="server"> 
     <ItemTemplate> 
      <div id="tabs-<%# DataBinder.Eval(Container.DataItem, "Key") %>"> 
      <div id="EmailForMoreInfo">Hey there!</div> 
      <br style="clear:both;" /> 
      </div> 
     </ItemTemplate> 
    </asp:Repeater> 
    </div> 

이 작동하지 않습니다. 중계기 밖으로 이동하면 모든 것이 작동합니다. jQuery를 분석하면 두 경우 모두 요소를 잘 찾을 수 있지만 실제로 리피터 외부에있는 경우에만 올바르게 표시되거나 숨길 수 있습니다. 그렇지 않으면 항상 표시됩니다. 다른 사람이 이것을 실행하고 해결 방법이 있습니까?

답변

0

ASP.NET에 익숙하지는 않지만 주어진 ID로 둘 이상의 요소를 만드는 것처럼 들립니다. 요소 ID는 고유해야합니다. 대신 class 속성을 사용하십시오.

1

리피터를 사용하면이 페이지 중 하나 이상이 있다고 생각하게합니다. 그리고 기본적인 날 하나의 HTML은 말합니다 : 당신은 같은 ID로 일을 가질 수 없어!

그래서 일반적인 클래스이지만 고유 한 ID를 지정해야합니다. 우리는이 문제를 해결하는 가장 좋은 방법이 무엇인지 알아 내기 위해 좀 더 많은 코드를 찾아야 할 것입니다.

jquery는 페이지에 같은 ID를 가진 것이 하나 이상있을 때 매우 혼란 스럽습니다.

+0

jQuery가 "사양을 위반하고 document.getElementById'를 깨는 것만큼 혼란스럽지 않습니다." –

0

제대로 작동해야한다고 생각합니다. 내가 먼저 몇 가지를 시도하는 이유하지만 ... 알아내는

1 - 표시를 확인하고 숨기기 -

$(".InfoClass").show(); 

<div id="EmailForMoreInfo" class="InfoClass">Hey there!</div> 

2 ... 대신 ID의 클래스를 사용하여 선택기를 변경해보십시오 방법이라고 - 전에 각 후 경고를 추가 ...

if (event.srcElement && event.srcElement.hash == "#2") { 
    alert("before show"); 
    $("#EmailForMoreInfo").show(); 
    alert("after show"); 
} else { 
    alert("before hide"); 
    $("#EmailForMoreInfo").hide(); 
    alert("after hide"); 
} 

여기에서 무슨 일이 일어 나는지

편집 : 같은 값을 여러 ID의 충돌 (모두가 말했다처럼) 내 initia했다 나는 생각하지만 ... 나는 같은 ID 값으로 작업하는 것을 당연히 생각했다. 그래서 문제가된다고 말하고 싶지 않았다. 몇 가지 테스트 옵션을 제공하는 것이 더 좋다.

0

리피터 안에는 DIV의 ID는 더 이상 고유하지 않습니다. 따라서 CSS 클래스 나 다른 조합을 사용하여 타겟팅해야합니다. 이걸로 무엇을 하려니? 한 번에 모두 표시하거나 숨기시겠습니까? 당신이 그것을 "EmailForMoreInfo"라는 CSS 클래스를주고 할 경우

if (event.srcElement && event.srcElement.hash == "#2") { 
    $(".EmailForMoreInfo").show(); 
} else { 
    $(".EmailForMoreInfo").hide(); 
} 
작동합니다

,하지만 당신은 행 수준에서 뭔가를 필요로하는 경우, 알려 주시면 더 도움이 될 수 있습니다.

관련 문제