how can I override jquery's .serialize to include unchecked checkboxes

后端 未结 10 878
暖寄归人
暖寄归人 2020-12-16 14:21

I have read quite a few different methods of having html checkboxes get posted to the server, but I am really looking to do it without modifying anything except for $.serial

10条回答
  •  生来不讨喜
    2020-12-16 15:00

    Here's how I implemented a simple override of $.serializeArray which fixes the default serialization behaviour for checkboxes, and default behaviour is retained for all other types.

    In the code below, missed checkboxes are injected into the original serialized array. Checkbox state is returned as "true" (instead of "on") or "false" depending on if it is checked or not.

    (function ($) {
        var _base_serializeArray = $.fn.serializeArray;
        $.fn.serializeArray = function () {
            var a = _base_serializeArray.apply(this);
            $.each(this, function (i, e) {
                if (e.type == "checkbox") {
                    e.checked 
                    ? a[i].value = "true" 
                    : a.splice(i, 0, { name: e.name, value: "false" })
                }
            });
            return a;
        };
    })(jQuery);
    

    You could customize this to return "on"/"off" or true/false.

提交回复
热议问题