我有一些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
非常感谢任何帮助。
答案 0 :(得分:2)
用双引号包装要检查的属性的值,所以你有:
$('input[type=checkbox][name="compare[]"]')
而不是
$("input[type=checkbox][name=compare[]]")
或者,您可以使用\\
来转义属性名称中的[
和]
:
$("input[type=checkbox][name=compare\\[\\]]")
您可能还应该使用.prop()
而不是.attr()
来将元素设置为已禁用。