2012-09-10 16 views

Trả lời

5
$('input[type="checkbox"]').filter(function() { 
return !this.disabled && this.checked; 
}) 
+1

Có, nhưng mất ': checked' từ bộ chọn và thực hiện chức năng lọc'! This.disabled && this.checked' sẽ cải thiện hiệu suất tuyệt vời . – lonesomeday

+0

tại sao chính xác? Tôi nghĩ rằng công cụ chọn sẽ làm nó nhanh hơn chức năng của tôi. Tuy nhiên nó dễ hiểu hơn, tôi sẽ chỉnh sửa câu trả lời của tôi. – Hoffmann

+0

Bởi vì các trình duyệt không hiểu ': checked', nên jQuery phải tự thực hiện nó, điều này rất chậm. Thêm một kiểm tra boolean thêm là nhanh hơn nhiều. – lonesomeday

7
$('input[type="checkbox"]:checked').not(":disabled"); 

Dưới đây là một fiddle

+0

bạn phải sử dụng hàm .filter() như trong câu trả lời của tôi – Hoffmann

25

Giống như vậy:

$("input[type='checkbox']:checked").not(":disabled")... 

này tìm lĩnh vực có input s, với kiểu checkbox, được kiểm tra, và không bị vô hiệu hóa. Nếu điều này không làm việc, bạn nên sử dụng một kiểm tra thuộc tính:

$("input[type='checkbox']:checked").not("[disabled]")... 

Hoặc, như @lonesomeday astutely chỉ ra, bạn có thể kết hợp nó vào một selector:

$("input[type='checkbox']:checked:not(:disabled)")... 

tôi đã đặt cùng một bằng chứng-khái niệm in this fiddle.

+5

Không có điểm nào khi sử dụng hai bộ chọn riêng biệt tại đây. Bạn cũng có thể làm 'input [type =" checkbox "]: checked: not ([disabled])'. – lonesomeday

2

Bạn có thể sử dụng selector này ..

​$('input[type=checkbox]:checked:not(:disabled)')​ 

Kiểm tra này FIDDLE

0

thế nào về $("input[type='checkbox']:checked:enabled")?