优化jquery复选框脚本

时间:2010-08-04 15:06:46

标签: jquery checkbox

我正在努力使用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");
    }
}

1 个答案:

答案 0 :(得分: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) {

但这确实是一种偏好。