2010-11-19 13 views
0

Ich denke, das ist ein ziemlich einfaches Problem.jQuery Selector

Ich habe eine große Tabelle. In jeder Zeile sind zwei Kontrollkästchen. Wenn eines aktiviert ist, möchte ich auch das Attribut des anderen Kontrollkästchens in derselben Zeile in checked ändern.

My Code on Paste Bin

<script language="javascript" type="text/javascript"> 
$(document).ready(function(){ 
$(".BookTable input[name=attended]").click(function() { 

    if ($(this).attr("checked") == true) 
    { 
     $("input").parent().parent("input[name=attended]").attr("checked","yes"); 
    } 
});  
}); 
</script> 

<table class="BookTable adj-table"> 
<tr> 
<td>Joe</td> 
<td>Bloggs</td> 
<td><input name="booking" id="booking" type="checkbox" value="1" /></td> 
<td><input name="attended" id="attended" type="checkbox" value="1" /></td> 
</tr> 
<tr> 
<td>Dave</td> 
<td>Smith</td> 
<td><input name="booking" id="booking" type="checkbox" value="1" /></td> 
<td><input name="attended" id="attended" type="checkbox" value="1" /></td> 
</tr> 
</table> 

scheinen So kann ich es bisher nur zu bekommen alle Kontrollkästchen aktivieren.

+0

Immer eigentlich * enthalten * Ihren Code in der Frage. Ein Link ist in Ordnung, aber die Fragen und Antworten von StackOverflow sollten eigenständig sein (und die Leute sollten nicht irgendwo anders hinklicken müssen, um Ihre Frage zu lesen). –

+0

ID-Attribute sollten im Dokument eindeutig sein. In diesem Beispiel werden sie nicht einmal verwendet, also können Sie diese komplett löschen. – nickf

+2

'id' Attribute ** müssen ** eindeutig sein. Kein "sollte" darüber. :-) –

Antwort

0
$(".BookTable :checkbox").click(function(){ 
    if ($(this).is(":checked")) 
     $(this).parents("tr").find(":checkbox").attr("checked", "checked"); 
    else 
     $(this).parents("tr").find(":checkbox").removeAttr("checked"); 
}); 
+0

Das ist nicht nötig, '.attr (" checked ", bool)' funktioniert in * jedem * Browser, du verwechselst das DOM mit HTML-Markup, das sind ganz andere Dinge. –

+0

Danke Jungs das alles scheint gut zu funktionieren, wenn getestet. Dieses passt am besten zu meinen Bedürfnissen, da es beide Kästchen bei der Auswahl nicht deaktiviert. – Sam

3

können Sie .closest() verwenden innerhalb der <tr> dann .find() Eingänge zu gehen, wie folgt aus:

$(".BookTable :checkbox").change(function() { 
    $(this).closest("tr").find(":checkbox").attr("checked", this.checked); 
}); 

You can test it out here. Wenn Sie nur überprüfen wollen, aber nicht deaktivieren Sie die anderen, fügen Sie einfach ein if() dort like this:

$(".BookTable :checkbox").change(function() { 
    if(this.checked) 
    $(this).closest("tr").find(":checkbox").attr("checked", true); 
}); 
+0

setzt das 'checked'-Attribut nicht auf irgendetwas, das in einigen Browsern überprüft wird? – hunter

+0

@hunter - Nein, es ist ein boolean Attribut –

+0

In IE, wenn Sie 'geprüft = "false" gesetzt' es wird geprüft, noch – hunter

0

Sie nicht zwei Ids mit dem gleichen Namen haben können, sollten Sie sie eine Klasse machen