0

我有一些 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

任何帮助将不胜感激。

4

1 回答 1

2

将要检查的属性的值用双引号括起来,这样您就可以:

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

而不是

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

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

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

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

于 2013-04-05T14:45:25.203 回答