2013-02-07 119 views
0

遇到麻烦,请使用jQuery选择我的ListView的兄弟值。这里是我尝试的jQuery语法,但是当我在firebug中写入控制台时进行调试时,它表示一切都未定义,但是当我查看html时,我可以看到它们中的值,所以我知道它们只是不选择它们。它正在被更新按钮的点击事件调用,我需要抓住我更新的行的列表视图中的不同行的兄弟姐妹。选择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'在这种情况下?这段代码叫什么名字? –

+0

你的html结构很奇怪。而这是什么? – pktangyue

+0

可以请你发布生成的HTML? –

回答

0

是兄弟姐妹#addr#place#addr#place唯一的东西。他们没有其他的兄弟姐妹。所以你的逻辑有些错误。你想从中选择什么?

此外,由于您似乎正在使用可能会复制多次的模板,因此您将拥有多个具有相同id的元素。改用类。

最后,另一个提示,缓存您的jQuery对象,而不是重新创建相同的。

编辑:根据您的更新,你的问题是,你的按钮nbr是表姐不是同级#addr#place。你需要做的是从nbr导航到它的父母td,然后从那里到它的兄弟td,然后到它的孩子。

喜欢的东西:

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

或多个完整的(你idclass而不是替换后):

$('.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