2010-08-04 4 views
1

J'essaie de mieux utiliser Jquery et j'aimerais donc avoir des commentaires sur les façons d'optimiser mon script ci-dessous.Optimisation du script de la case à cocher jquery

Pour décrire brièvement la fonctionnalité, j'ai une case à cocher "checkall" et un bouton pour effectuer des actions sur les éléments cochés. Si aucun élément n'est coché, mon bouton doit être désactivé et la classe doit être désactivée. Si un seul élément est coché, le bouton ne doit pas être désactivé, ni la classe désactivée.

Merci à l'avance

$(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"); 
    } 
} 

Répondre

2

Je n'ai pas beaucoup à dire au sujet de l'optimisation ici, mais on peut supposer que vous essayez de désactiver ce:

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

Il devrait plutôt être:

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

et vous pouvez utiliser enchaînement:

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

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

En outre, cette condition:

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

peut être changé en un peu plus concis:

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

Mais c'est vraiment une chose de préférence.

+0

Juste je viens de découvrir ce bug moi-même. Merci d'avoir signalé! Le code est maintenant comme ceci: $ ("# delete_selected"). Attr ("disabled", false); $ ("# delete_selected"). RemoveClass ("disabled"); – Kristian

Questions connexes