2016-06-21 4 views
1

Dies sollte einfach sein, aber ich bin wirklich fest.jQuery DOM Navigation - finden Sie das nächste Etikett nach Checkbox Checkbox

Ich habe ein Tabellenelement, das mit einem Repeater asp.net ausgefüllt ist. Mein Benutzer aktiviert ein oder mehrere Kontrollkästchen und mein jQuery durchläuft diese, um den zugehörigen Etikettentext zu finden. Ich hatte das funktionierende, aber ich habe die Organisation meines Tisches geändert, und jetzt kann ich nicht scheinen, dass es wieder funktioniert.

Mein HTML:

<table class="c _table"> 
    <asp:Repeater ID="rptData" runat="server"> 
    <HeaderTemplate> 
    <tr> 
     <th> 
      <asp:Image runat="server" CssClass="c_imgPlusMinus" ImageUrl="Images/plus.jpg" /> 
     </th> 
     <th> 
      <asp:CheckBox ID="chkConAll" runat="server"/>Select Data 
     </th>  
    </tr>  
    </HeaderTemplate> 
    <ItemTemplate> 
    <tr> 
     <td > 
     </td> 
     <td> 
      <asp:CheckBox runat="server" cssclass="cd_chk" /><asp:Label runat="server" Text='<%#Eval("DataName") %>' /> 
     </td> 
    </tr> 
    </ItemTemplate> 
    </asp:Repeater>     
</table> 

Meine jQuery:

var wholeString= ''; 
$('.cd_chk :checkbox:checked').each(function() { 
    wholeString = $(this).next('label').text(); 

    (do some stuff with wholeString) 

}); 

Aber ich habe monkeying herum scheinen mit dieser für eine Stunde oder mehr, und ich kann den Text nicht zu holen von diesem Etikett im Repeater.

This post war, wo ich die Syntax in diesem Beitrag ($ (this) .next ('Label'). Text();), aber weder das noch etwas anderes Ich habe versucht zu arbeiten scheint.

Danke für jede Hilfe.

EDIT: Per Vorschlag, hier ist die tatsächliche Markup von meinem Code erzeugt. Der Zwischenverstärker erzeugt zwei Reihen:

<table class="c_analyte_table"> 
<tr> 
<th> 
<img class="c_imgPlusMinus" src="Images/plus.jpg" /> 
</th> 
<th> 
<input id="chkConAll" type="checkbox" name="ctl00$MainContent$rptConventionals$ctl00$chkConAll" /> 
Conventionals 
</th>  
</tr>  
<tr class="cd_chemRow"> 
<td > 
</td> 
<td> 
<span class="cd_chkLab"><input id="" type="checkbox" name="ctl00$MainContent$rptConventionals$ctl01$ctl00" /></span><span>Total Suspended Solids, Particulate</span> 
</td> 
</tr> 
<tr class="cd_chemRow"> 
<td > 
</td> 
<td> 
<span class="cd_chkLab"><input id="" type="checkbox" name="ctl00$MainContent$rptConventionals$ctl02$ctl00" /></span><span>Total Suspended Solids, Total</span> 
</td> 
</tr> 
</table> 
+0

wholeString = wholeString = $ (this) .next ('label') Text(); <--- Was versuchst du hier zu machen? –

+0

versuchen Sie '$ (this) .parent ('td'). Find ('label'). Text();', und ja, wie oben erwähnt, sieht aus wie etwas falsch mit der Zuordnung –

+0

@ Amit.rk3, Nö, hat nicht funktioniert. Das ist eines der Dinge, die ich ausprobiert habe, und ich denke, es sollte funktionieren, aber es gibt mir eine leere Zeichenfolge. – Stanton

Antwort

3

standardmäßig Label Steuerung als span HTML-Element wiedergegeben wird. Nur wenn dieses Steuerelement eine Eigenschaft AssociatedControlID hat, wird diese als label dargestellt.

Sie haben diese Eigenschaft nicht festgelegt. Wenn Sie also nach label suchen, erhalten Sie gar nichts. Sie müssen span abfragen.

Beachten Sie auch, dass Checkbox in <span><input></span> rendert, so dass das Eingabeelement selbst keine Geschwister hat, müssen Sie zuerst zu seinem übergeordneten Element gelangen.

Alles in allem:

wholeString = $(this).parent().next('span').text(); 

Eine andere Lösung, vielleicht einfachere, wäre etwas Klasse Label zuweisen. Es muss in keinem CSS definiert werden, da es nur als Unterscheidung für die Abfrage dient. Zum Beispiel könnte man sagen:

<Label CssClass="checkboxLabel" .../> 

die Abfrage würde unabhängig von Details von ASP.NET-Rendering-Engine.

wholeString = $(this).parent('td').find('.checkboxLabel').text(); 
+0

Das hat auch nicht funktioniert, obwohl ich sicher bin, dass Sie recht haben. Das war, was ich vor einem Jahr mit dem jQuery hatte, was funktionierte, aber ich konnte mich nicht erinnern, warum ich 'span' benutzt habe. Ich werde mich daran erinnern, danke, aber ich bekomme immer noch eine leere Zeichenfolge für wholeString. – Stanton

+0

@Stanton, seltsam, das sollte es gewesen sein. Können Sie das genaue Markup posten, das für eine der Tabellenzeilen generiert wird? – Andrei

+0

guter Vorschlag, ich habe die Frage bearbeitet, um die tatsächliche Markierung anzuzeigen, die von meinem Code produziert wird. – Stanton