2013-02-07 4 views
0

jQuery를 사용하여 내 ListView의 형제 값을 선택하는 데 문제가 있습니다. 여기에 내가 시도하고있는 jQuery 구문은 있지만 콘솔에 쓰는 불 덩어리로 디버깅 할 때 모든 것이 정의되지 않았 음을 알지만, html을 볼 때 값을 볼 수 있으므로 선택할 수 없다는 것을 알고있다. Update 버튼의 click 이벤트에서 호출되고 있습니다. 업데이트중인 행에 대한 내 listview에서 고유 한 행의 형제를 가져와야합니다.HTML의 형제 값 선택

 $('.nbr') 
.click(function){ 
      var newaddr = $(this).siblings('#addr').val(); 
      var originaladdr = $(this).siblings('#addr').attr('data-Value'); 
      var newplace = $(this).siblings('#place').val(); 
      var originalplace = $(this).siblings('#place').attr('data-Value'); 

의 ListView :

<asp:ListView runat="server" id="ListView1" > 
     <LayoutTemplate> 
      <table id="tablesorter" style="border:solid 1px black;width:55%;"> 
       <thead> 
        <tr> 
         <th> 
          <a href="#">Addr</a> 
         </th> 
         <th> 
          <a href="#">Place</a> 
         </th> 
        </tr> 
       </thead> 
       <tbody> 
        <tr id="itemPlaceholder" runat="server" /> 
       </tbody> 
       <tfoot> 
       </tfoot> 
      </table> 
     </LayoutTemplate> 
     <ItemTemplate> 
      <tr> 
       <td> 
        <input maxlength="3" size="4" type="text" id="addr" data-Value="" value="<%# Eval("addr")%>" /> 
        <input maxlength="4" size="4" type="text" id="place" data-Value="" value="<%# Eval("place")%>" /> 
       </td> 
       <td> 
        <input type="button" class="nbr" id="btn_update" value="Update" />      
       </td> 
      </tr> 
     </ItemTemplate> 
    </asp:ListView> 
+0

:

$(this).parent().prev().children("#addr"); 

이상 완료 (당신의 id 대신 class로 교체 후) : 같은

뭔가? 이 코드는 어디에서 호출됩니까? –

+0

귀하의 html 구조가 매우 이상합니다. '이'란 무엇입니까? – pktangyue

+0

생성 된 HTML을 게시 할 수 있습니까? –

답변

0

#addr에 형제 자매이며, #place#addr#place있는 유일한 일. 그들은 다른 형제가 없습니다. 그래서 당신의 논리가 잘못되었습니다. 무엇부터 선택하려고합니까?

또한 여러 번 복사 될 것으로 예상되는 템플릿을 사용하고있는 것처럼 보이기 때문에 id이 여러 개인 요소가 있습니다. 클래스를 대신 사용하십시오.

마지막으로 또 다른 팁은 동일한 것들을 재현하는 대신 jQuery 객체를 캐시하는 것입니다.

편집 : 당신의 갱신을 바탕으로, 문제가 버튼 nbr이 사촌하지 #addr#place에 형제 것입니다. 당신이해야 할 일은 nbr에서부터 부모 td까지 이동 한 다음, 형제 인 td으로 이동 한 다음 그곳에있는 아이들까지 이동하는 것입니다. 이러한 맥락에서`this` 무엇

$('.nbr').click(function){ 
    var parent = $(this).parent().prev(); 
    var addrNode = parent.children(".addr").first(); 
    var placeNode = parent.children(".place").first(); 

    var newaddr = addrNode.val(); 
    var originaladdr = addrNode.data('Value'); 
    var newplace = placeNode.val(); 
    var originalplace = placeNode.data('Value'); 
    // whatever you want to do with these values... 
} 

Here's a fiddle to demonstrate

+0

addr 및 place는 채워진 값이므로 고유 한 값을 갖습니다. – Jt2ouan

+1

@ERead : 값에 대해 이야기하는 것이 아니라 자신의 ID에 대해 이야기하는 것입니다. 동일한 'id'를 가진 HTML 요소를 여러 개 가져서는 안됩니다. –

+0

은 여전히 ​​값이 정의되지 않았다고 말합니다. 나는 이걸했다. var AddrNode = $ (this) .parent(). prev(). children ("# addr"); var newaddr = AddrNode.val(); 그리고 그것은 작동하지 않았다 – Jt2ouan