2012-12-20 17 views
0

我想在選中其他複選框時自動選中複選框。jquery複選框按類自動選擇同一表中的其他

這裏是我使用的和不正常的代碼:我試圖使其只從其中「CB1」被檢查同桌檢查「CB2」

<table class='block'> 
<tr> 
<td> 
<input class='cb1' type='checkbox'><label>Checkbox 1</label> 
</td> 
<td> 
<input class='cb2' type='checkbox'><label>Checkbox 2</label> 
</td> 
<td> 
<input class='cb2' type='checkbox'><label>Checkbox 2</label> 
</td> 
</tr> 
</table> 

<table class='block'> 
<tr> 
<td> 
<input class='cb1' type='checkbox'><label>Checkbox 1</label> 
</td> 
<td> 
<input class='cb2' type='checkbox'><label>Checkbox 2</label> 
</td> 
<td> 
<input class='cb2' type='checkbox'><label>Checkbox 2</label> 
</td> 
</tr> 
</table> 

<script type='text/javascript'> 
$(document).ready(function(){ 
    $('.block .cb1').click(function(){ 
     if($(this).is(':checked')) 
      { 

       $(this).parent().find('.cb2').attr('checked','checked'); 
      } 
     else 
      { 
       $(this).parent().find('.cb2').removeAttr('checked'); 
      } 
    }); 
}); 
</script> 

回答

1

您需要將parent()替換爲closest('table')(或closest('tr'),對於顯示的HTML)調用。看,複選框元素的直接父母是<td>元素 - 顯然不包含任何其他複選框。您需要進一步瞭解DOM以查找其他所有複選框作爲後代的元素。

-1

如果你要選擇的第一CB2複選框試試這個

$(this).parent().parent().find('.cb2').first().attr('checked','checked'); 

DEMO

+1

在所示的結構中的所有複選框是第一(元素)子節點; 「第一胎」表達沒有意義。 – raina77ow

+1

謝謝@ raina77ow我已編輯我的代碼 –

+1

爲什麼要downvote?請現在解釋 –

0

試試這個代碼,因爲你eith父()選擇TD不是TR

(this).parent().parent().find('.cb2').attr('checked','checked'); 

您代碼是搜索一個元素cb2裏面<td>正弦您的選擇是.parent() ..它必須通過ħ第三父級別到達<table>元件..

所以使用parents()eq()

$(this).parents().eq(3).find('.cb2').attr('checked','checked'); 

*OR* 

$(this).parents().eq(2).find('.cb2').attr('checked','checked'); // since all your checkbox is under <tr> 

這裏是小提琴..

http://jsfiddle.net/MKSgf/

相關問題