2011-08-19 50 views
3

我有了像行的表:更改類TR的

<tr> 
    <td><input type="checkbox" /></td> 
    <td><a href="#">School</a></td> 
    <td><a href="#">DD1 1AB</a></td> 
    <td>80.10</td> 
    <td>200</td> 
    <td><span class="active">Active</span></td> 
    <td><a href="#">John Doe</a><br/>00000 000000</td> 
</tr> 

當用戶選中該複選框是改變類的父<tr>的什麼,我想要做的就是說選擇,以便用戶知道他們選擇了哪一行。注意:他們可以切換這些打開和關閉!

+2

請停止寫作「jQuery的:」在你所有的問題標題的開始。我們已經有一個標籤系統。 –

+0

你有什麼嘗試?這是一個問答網站,不是會議場所的程序員。 –

回答

3

假設一些checkboxed的可能會預先檢查,我會採取這種做法:

// First add class for pre-checked entries 
$(".xyz input[type=checkbox]:checked").each(function() { 
    $(this).closest("tr").addClass("selected"); 
}); 

// Then toggle class whenever checkbox state changes 
$(".xyz input[type=checkbox]").live("change", function() { 
    $(this).closest("tr").toggleClass("selected"); 
}); 

現場演示:http://jsfiddle.net/cUxmG/

爲了減少兩次搜索DOM的開銷,可將其組合爲:

$(".xyz input[type=checkbox]").live("change", function() { 
    $(this).closest("tr").toggleClass("selected"); 
}).filter(":checked").each(function() { 
    $(this).closest("tr").addClass("selected"); 
}); 

它做同樣的事情:http://jsfiddle.net/cUxmG/2/

+0

如果複選框的狀態隨不同地點的js而改變,該怎麼辦? (例如,點擊行監聽器) – Martin

+0

您可以嘗試手動觸發「更改」,即使是執行更改的js也會如此。 http://jsfiddle.net/cUxmG/18/ –

6
$('table').delegate(':checkbox','change',function(){ 
    var $elem = $(this), 
    $tr = $elem.closest('tr'); 

    if($elem.is(':checked')){ 
    $tr.addClass('highlight'); 
    }else{ 
    $tr.removeClass('highlight'); 
    } 
    return false; 

}) 
2
$('input[type="checkbox"]').click(function(){ 
    if($(this).prop('checked')) 
    $(this).parent().parent().addClass('your_class'); 
    else 
    $(this).parent().parent().addClass('your_class'); 
}); 

我希望這可以幫助你

+0

$(this).checked不起作用。 $(this).prop('checked')會,或者this.checked會。 $(this)是jQuery包裝的DOM元素對象。 –

+0

thnx fixed :) ... –

+0

'.closest(「tr」)'會比'.parent()。parent()'更健壯。這也更容易閱讀。 –