2013-04-05 83 views
0

我有一些1.6的老jQuery代碼完美的工作,但我現在重做網站並升級到1.9.1 jQuery和我的舊代碼不起作用。jQuery 1.9複選框計數

$("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的類,以幫助更容易閱讀。

我收到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

我不知道它是如何關聯的,但我建議在選擇器中用引號括住屬性值:'$(「input [type ='checkbox'] [name ='compare []']:checked 「)'。 – VisioN 2013-04-05 14:44:12

回答

2

總結爲要在雙引號來檢查,所以你必須將屬性值:

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

而不是

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

或者您可以使用\\逃脫[]屬性名稱中:

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

您可能也應該使用.prop()而不是.attr()將元素設置爲禁用。

+0

感謝你得到它,不能相信它像逃避選擇器的價值一樣簡單,我也將它改爲prop()。 :) – 2013-04-05 14:57:17