Sử dụng các trường được chọn theo đề xuất của Andy không nhất thiết là lựa chọn tốt nhất cho trải nghiệm người dùng vì nó cần hai lần nhấp chuột thay vì một lần.
Hơn nữa, "Chọn" sử dụng nhiều không gian hơn trong giao diện người dùng so với hộp kiểm.
Câu trả lời của Ash là một giải pháp đơn giản nhưng không hoạt động trong trường hợp các trường mảng .
Trong ngữ cảnh của tôi, tôi có một biểu mẫu có độ dài thay đổi, chứa các hàng hiển thị kết hợp các trường văn bản và hộp kiểm:
<input type="checkbox" value="1" name="thisIsAChkArray[]"/>
<input type="text" value="" name="thisIsATxtArray[]"/>
Để giải mã dữ liệu đã đăng, đơn đặt hàng của các phần tử mảng rất quan trọng. Việc chỉ thêm các mục không được kiểm tra vào một tuần tự hóa Jquery thông thường sẽ không giữ thứ tự của các phần tử hàng.
Đây là một giải pháp được đề xuất dựa trên câu trả lời của Ash:
(function($) {
$.fn.serializeWithChkBox = function() {
var values = $(this).find('select')
.add( $(this).find('input[type!=checkbox]') )
.serialize();
$(this).find('input[type=checkbox]').each(function() {
var chkVal = $(this).is(':checked') ? $(this).val() : "0";
values += "&" + $(this).attr('name') + "=" + chkVal;
});
return values;
}
})(jQuery);
<input type="checkbox" id="event_allDay" name="event_allDay" class="checkbox" checked="checked" Value="On" />
<input type="hidden" name="event_allDay" Value="Off" />
Bằng cách này nó nếu nó không được chọn, nó sẽ mất giá trị của ẩn