2010-08-04 2 views
1

Я пытаюсь улучшить использование JQuery и поэтому хотел бы получить отзывы о способах оптимизации моего сценария ниже.Оптимизация jquery checkbox script

Чтобы вкратце описать функциональность, у меня установлен флажок «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

Правильно я только что обнаружил эту ошибку самостоятельно. Спасибо за указание, хотя! Код выглядит следующим образом: $ ("# delete_selected"). Attr ("disabled", false); $ ("# delete_selected"). RemoveClass ("disabled"); – Kristian