2010-08-04 56 views
1

我想在使用Jquery的時候變得更好,因此想要關於如何優化我的腳本的反饋。優化jquery複選框腳本

簡要描述功能我有一個「checkall」複選框和一個按鈕,用於對選中的元素執行操作。如果沒有檢查元素,我的按鈕應該被禁用,並禁用了類的功能。如果只有一個元素被選中,則該按鈕不應被禁用,也不會禁用該類。

在此先感謝

$(document).ready(function(){ 

$('#checkall').click(function() { 
    $(this).parents('.table_form:eq(0)').find(':checkbox').attr('checked', this.checked); 

    if($(this).parents('.table_form:eq(0)').find(':checkbox').is(':checked')) { 
     $("#delete_selected").attr("disabled"); 
     $("#delete_selected").removeClass("disabled"); 
    } else { 
     $("#delete_selected").removeAttr("disabled").addClass("disabled"); 
    } 
}); 

$("#blog_posts tbody :checkbox").click(checked_status); 

}); 

function checked_status() { 
    var n = $("input:checked").length; 

    if(n > 0) { 
     $("#delete_selected").attr("disabled"); 
     $("#delete_selected").removeClass("disabled"); 
    } else { 
     $("#delete_selected").removeAttr("disabled").addClass("disabled"); 
    } 
} 

回答

2

我沒有很多在這裏說一下優化,但想必你正試圖將其設置爲禁用:

$("#delete_selected").attr("disabled"); // won't work, simply returns true or false 

應該改爲:

$("#delete_selected").attr("disabled", true); // or "disabled" 

,你可以使用鏈接:

$("#delete_selected").attr("disabled", true) 
        .removeClass("disabled"); 

http://api.jquery.com/attr/

而且,這種情況:

if($(this).parents('.table_form:eq(0)').find(':checkbox').is(':checked')) { 

可改爲稍微更簡潔:

if($(this).closest('.table_form').find(':checkbox:checked').length) { 

但是,這確實是一個優先的事情。

+0

對我剛發現那個bug自己。感謝您指出!代碼如下: $(「#delete_selected」)。attr(「disabled」,false); $(「#delete_selected」)。removeClass(「disabled」); – Kristian 2010-08-04 15:23:35