jQuery 1.9复选框计数

时间:2013-04-05 14:41:01

标签: javascript jquery html checkbox

我有一些1.6版本的旧jQuery代码可以很好地工作,但我目前正在重做网站并升级到1.9.1 jQuery,我的旧代码不起作用。

$("input[type=checkbox][name=compare[]]").click(function() {    
    var bol = $("input[type=checkbox][name=compare[]]:checked").length >= 5;     
    $("input[type=checkbox][name=compare[]]").not(":checked").attr("disabled",bol); 
    $(this).closest("tr").toggleClass("marked", this.checked);
});

我的表行有一个带有行值的复选框,如果选中它会将行id推入一个数组,这样我就可以在其他地方工作了。它还允许一次激活最多5个复选框并禁用其余复选框,因此无法检查它们(是的我知道这些可以通过DOM完成,但在任何处理之前都在PHP中检查过)。它还会应用标记为更暗的bg的类来帮助更容易阅读。

我在加载Chrome的javascript控制台中收到以下错误

Uncaught Error: Syntax error, unrecognized expression: input[type=checkbox][name=compare[]] 

当时代码更像是一个黑客工作,让我感到惊讶,它甚至有效(笑)。

以下代码将选中已选中的复选框并将值放入数组中,以便我可以通过ajax将其关闭。

$("input[type=checkbox][name=compare[]]:checked").each(function() {
        data['id[]'].push($(this).val());
    });

我已经开始重写它,但在尝试给每个复选框提供它自己的唯一标识符时遇到了问题,而在jquery自行完成之前。

.compare_check是复选框的类

$('.compare_check').click(function() {      
    if (!$(this).is(':checked')) {
                 // do some work on

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

用双引号包装要检查的属性的值,所以你有:

$('input[type=checkbox][name="compare[]"]')

而不是

$("input[type=checkbox][name=compare[]]")

或者,您可以使用\\来转义属性名称中的[]

$("input[type=checkbox][name=compare\\[\\]]")

您可能还应该使用.prop()而不是.attr()来将元素设置为已禁用。