2014-10-10 74 views
0

我在列表視圖中有一個html表格,並在其中有一個名爲「vehicle_num」的隱藏標籤。我能夠得到選定的表格行,以及任何td,但我似乎無法獲得標籤的價值。我曾嘗試過:使用jquery獲取表中隱藏標籤的值?

var vehicle_number = $(this).closest('tr').children('#vehicle_num').text(); 

下面是listview的代碼。我如何獲得標籤的價值?

<asp:ListView ID="lvEquipmentList" runat="server" DataKeyNames="vehicle_number"> 
    <LayoutTemplate> 
      <table id="table-equipment-list" class="table table-list"> 
       <thead> 
        <tr> 
         <th scope="col" class="product-line">Product line</th> 
         <th scope="col" class="model-number">Model #</th> 
         <th scope="col" class="serial-number">Serial #</th> 
         <th scope="col" class="dar-status">DAR Status</th> 
         <th scope="col" class="ship-date">Ship Date</th> 
        </tr> 
       </thead> 
       <tbody> 
        <asp:PlaceHolder ID="ItemPlaceholder" runat="server" /> 
       </tbody> 
      </table> 
    </LayoutTemplate> 
    <ItemTemplate> 
     <tr> 
      <th scope="row" class="product-line"><div class="icon"><img src='<%#Eval("image_path")%>' onerror="this.src='assets/images/placeholder.png';" alt=""/></div> <span class="line-title"><%#Eval("product_line")%></span></th> 
      <td class="model-number"><%#Eval("model")%><label class="vehicle_num" hidden="hidden"><%#Eval("vehicle_number")%></label></td> 
      <td class="serial-number"><%#Eval("serial_number")%></td> 
      <td class="dar-status"><img src='<%#Eval("display_status") %>'/></td> 
      <td class="ship-date"><%#Eval("date")%></td> 
     </tr> 
    </ItemTemplate> 
    <EmptyDataTemplate> 
     <table id="table-equipment-list" class="table table-list"> 
      <thead> 
       <tr> 
        <th scope="col" class="product-line">Product line</th> 
        <th scope="col" class="model-number">Model #</th> 
        <th scope="col" class="serial-number">Serial #</th> 
        <th scope="col" class="dar-status">DAR Status</th> 
        <th scope="col" class="ship-date">Ship Date</th> 
       </tr> 
      </thead> 
      <tbody> 
       <tr> 
        <th scope="row" class="product-line"><div class="icon"></div> <span class="line-title"></span></th> 
        <td class="model-number"></td> 
        <td class="serial-number"></td> 
        <td class="dar-status"></td> 
        <td class="ship-date"></td> 
       </tr> 
      </tbody> 
     </table> 
    </EmptyDataTemplate> 
</asp:ListView> 

EDIT

我已編輯上面的代碼把標籤在表列中。我是能夠得到使用值:

var vehicle_number = $(this).closest('tr').find('.vehicle_num').text(); 
+1

'

+1

當使用'MasterPages'時,'ASP.NET'傾向於更改'Control''ID'。 – melancia 2014-10-10 14:46:19

+0

看看這個:[Control.ClientIDMode屬性](http://msdn.microsoft.com/en-us/library/system.web.ui.control.clientidmode(v = vs.110).aspx) – melancia 2014-10-10 14:47:54

回答

2

這是不合法的標記:

<tr> 
    <th scope="row" class="product-line"><div class="icon"><img src='<%#Eval("image_path")%>' onerror="this.src='assets/images/placeholder.png';" alt=""/></div> <span class="line-title"><%#Eval("product_line")%></span></th> 
    <td class="model-number"><%#Eval("model")%></td> 
    <td class="serial-number"><%#Eval("serial_number")%></td> 
    <td class="dar-status"><img src='<%#Eval("display_status") %>'/></td> 
    <td class="ship-date"><%#Eval("date")%></td> 
    <label id="vehicle_num" hidden="hidden" runat="server"><%#Eval("vehicle_number")%></label> 
</tr> 

有一個錯誤label作爲tr的孩子,這是無效的。當瀏覽器試圖理解這一點時,它可以用label來構建一個有效的DOM,這會影響你的jQuery選擇器。

label需求是在一個表格單元格:

<tr> 
    <th scope="row" class="product-line"><div class="icon"><img src='<%#Eval("image_path")%>' onerror="this.src='assets/images/placeholder.png';" alt=""/></div> <span class="line-title"><%#Eval("product_line")%></span></th> 
    <td class="model-number"><%#Eval("model")%></td> 
    <td class="serial-number"><%#Eval("serial_number")%></td> 
    <td class="dar-status"><img src='<%#Eval("display_status") %>'/></td> 
    <td class="ship-date"><%#Eval("date")%></td> 
    <td><label id="vehicle_num" hidden="hidden" runat="server"><%#Eval("vehicle_number")%></label></td> 
</tr> 

(。或者,如果它一直隱藏無論如何,你也許可以把它放在一個現有的表格單元格中無論哪種方式應該工作)

此外,如果客戶端id在此處被明確設置,那麼這些記錄的任何重複將導致DOM中重複的id s,這也是無效的。當存在重複的id時,不同的瀏覽器以不同的方式響應id的選擇器,因爲行爲未定義。你可能想使用一個類來代替:

<label class="vehicle_num" ... 

由於label不再是孩子tr的而是後裔它,使用find()代替children()

$(this).closest('tr').find('.vehicle_num') 
+0

很棒的建議,把標籤放在另一個td裏面!我現在就試試這個。 – KateMak 2014-10-10 15:01:22

+0

我編輯了上面的代碼,將標籤放置在td中。我能夠通過使用以下值來獲得值:var vehicle_number = $(this).closest('tr')。find('#vehicle_num')。text(); – KateMak 2014-10-10 15:14:52

+0

@KateMak:我仍然建議您確保不要重新使用客戶端的「id」。如果這個選擇器工作,那麼這意味着你(在ListView中有多條記錄),這意味着選擇器在這種情況下是巧合的,但是標記仍然是無效的,所以不能保證它總是會工作或其他類似的選擇器將工作。 – David 2014-10-10 15:16:56