1. Object.prototype.serialize = function () {
    2. var res = [], //存放结果的数组
    3. current = null, //当前循环内的表单控件
    4. i, //表单NodeList的索引
    5. len, //表单NodeList的长度
    6. k, //select遍历索引
    7. optionLen, //select遍历索引
    8. option, //select循环体内option
    9. optionValue, //select的value
    10. form = this; //用form变量拿到当前的表单,易于辨识
    11. for (i = 0, len = form.elements.length; i < len; i++) {
    12. current = form.elements[i];
    13. //disabled表示字段禁用,需要区分与readonly的区别
    14. if (current.disabled) continue;
    15. switch (current.type) {
    16. //可忽略控件处理
    17. case "file": //文件输入类型
    18. case "submit": //提交按钮
    19. case "button": //一般按钮
    20. case "image": //图像形式的提交按钮
    21. case "reset": //重置按钮
    22. case undefined: //未定义
    23. break;
    24. //select控件
    25. case "select-one":
    26. case "select-multiple":
    27. if (current.name && current.name.length) {
    28. console.log(current)
    29. for (k = 0, optionLen = current.options.length; k < optionLen; k++) {
    30. option = current.options[k];
    31. optionValue = "";
    32. if (option.selected) {
    33. if (option.hasAttribute) {
    34. optionValue = option.hasAttribute('value') ? option.value : option.text
    35. } else {
    36. //低版本IE需要使用特性 的specified属性,检测是否已规定某个属性
    37. optionValue = option.attributes('value').specified ? option.value : option.text;
    38. }
    39. }
    40. res.push(encodeURIComponent(current.name) + "=" + encodeURIComponent(optionValue));
    41. }
    42. }
    43. break;
    44. //单选,复选框
    45. case "radio":
    46. case "checkbox":
    47. //这里有个取巧 的写法,这里的判断是跟下面的default相互对应。
    48. //如果放在其他地方,则需要额外的判断取值
    49. if (!current.checked) break;
    50. default:
    51. //一般表单控件处理
    52. if (current.name && current.name.length) {
    53. res.push(encodeURIComponent(current.name) + "=" + encodeURIComponent(current.value));
    54. }
    55. }
    56. }
    57. return res.join("&");
    58. }
    59. --------------------------------------------------------------------------------
    60. //注册
    61. document.querySelector('#regBox form').onsubmit = function (e) {
    62. e.preventDefault()
    63. // 发送axios注册请求
    64. axios({
    65. url: '/api/reguser',
    66. method: 'post',
    67. data: this.serialize()
    68. }).then(({ data: res }) => {
    69. //成功回调
    70. console.log(res)
    71. })
    72. }
    73. //登录
    74. document.querySelector('#loginBox form').onsubmit = function (e) {
    75. e.preventDefault()
    76. axios({
    77. url: '/api/login',
    78. method: 'POST',
    79. data: this.serialize()
    80. }).then(({ data: res }) => {
    81. //成功回调
    82. console.log(res)
    83. });
    84. }

    对HTML表单使用:
    1.formElement.serialize();
    2.复制代码