国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JS多個表單數據提交下的serialize()應用實例分析

2019-11-19 10:57:27
字體:
來源:轉載
供稿:網友

本文實例講述了JS多個表單數據提交下的serialize()應用。分享給大家供大家參考,具體如下:

在實際開發場景中,難免遇到需要多個表單的數據傳遞問題。

之所以要進行多表單的數據傳遞是因為可以進行數據分組,便于數據的維護。

這個時候,出于不依賴jquery的考慮,有一個原生js函數來解決這個問題無疑是最好的。而源自于《JavaScript高級程序設計》一書的serialize()函數就是解決這個問題的最好辦法,該函數如下:

function serialize(form){      var parts = [],        field = null,        i,        len,        j,        optLen,        option,        optValue;      for (i=0, len=form.elements.length; i < len; i++){        field = form.elements[i];        switch(field.type){          case "select-one":          case "select-multiple":            if (field.name.length){              for (j=0, optLen = field.options.length; j < optLen; j++){                option = field.options[j];                if (option.selected){                  optValue = "";                  if (option.hasAttribute){                    optValue = (option.hasAttribute("value") ? option.value : option.text);                  } else {                    optValue = (option.attributes["value"].specified ? option.value : option.text);                  }                  parts.push(encodeURIComponent(field.name) + "=" + encodeURIComponent(optValue));                }              }            }            break;          case undefined:   //fieldset          case "file":    //file input          case "submit":   //submit button          case "reset":    //reset button          case "button":   //custom button            break;          case "radio":    //radio button          case "checkbox":  //checkbox            if (!field.checked){              break;            }            /* falls through */          default:            //don't include form fields without names            if (field.name.length){              parts.push(encodeURIComponent(field.name) + "=" + encodeURIComponent(field.value));            }        }      }      console.log(parts);      return parts.join("&");}

對于讀過《JavaScript高級程序設計》的小伙伴來說,這個函數肯定不陌生;

但是如果我們傳遞的是一個對象,那么這個函數顯然就不符合要求,而在這個開發需求下,我們改下這個函數,改造后函數如下

function serialize(form){      var parts = {},        field = null,        i,        len,        j,        optLen,        option,        optValue;      for (i=0, len=form.elements.length; i < len; i++){        field = form.elements[i];        switch(field.type){          case "select-one":          case "select-multiple":            if (field.name.length){              for (j=0, optLen = field.options.length; j < optLen; j++){                option = field.options[j];                if (option.selected){                  optValue = "";                  if (option.hasAttribute){                    optValue = (option.hasAttribute("value") ? option.value : option.text);                  } else {                    optValue = (option.attributes["value"].specified ? option.value : option.text);                  }                  //將數據改為對象形式                  Object.defineProperty(parts, encodeURIComponent(field.name), {                    value:encodeURIComponent(optValue),                    enumerable:true //為真表示可枚舉,只有可枚舉才能出現在JSON.stringify()轉換的json數據中                  });                }              }            }            break;          case undefined:   //fieldset          case "file":    //file input          case "submit":   //submit button          case "reset":    //reset button          case "button":   //custom button            break;          case "radio":    //radio button          case "checkbox":  //checkbox            if (!field.checked){              break;            }            /* falls through */          default:            //don't include form fields without names            if (field.name.length){              //構建對象              Object.defineProperty(parts, encodeURIComponent(field.name), {                    value:encodeURIComponent(field.value),                    enumerable:true  //為真表示可枚舉,只有可枚舉才能出現在JSON.stringify()轉換的json數據中                  });            }        }      }      console.log(parts);      return parts;}

于是,表單數據改為對象顯示。如果有多個表單將表單保存到一個數組之中,利用JSON.stringify()轉為json格式,傳給后端;

注意:

利用Object.defineProperty創建對象,要加上 enumerable:true,否則json格式中不會出現對應的對象數據。這個純粹是JSON.stringify()的要求。

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具http://tools.VeVB.COm/code/HtmlJsRun測試上述代碼運行效果。

更多關于JavaScript相關內容可查看本站專題:《JavaScript操作DOM技巧總結》、《JavaScript頁面元素操作技巧總結》、《JavaScript事件相關操作與技巧大全》、《JavaScript查找算法技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript錯誤與調試技巧總結

希望本文所述對大家JavaScript程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 蛟河市| 栾川县| 南靖县| 六安市| 静宁县| 微博| 习水县| 交城县| 肃宁县| 启东市| 武陟县| 遂平县| 婺源县| 枝江市| 奉贤区| 赤水市| 福鼎市| 沧源| 海南省| 瑞安市| 阳泉市| 竹北市| 石阡县| 广河县| 邹平县| 德格县| 循化| 乌鲁木齐市| 元江| 喀什市| 通州区| 吐鲁番市| 北辰区| 紫阳县| 三亚市| 和政县| 浦东新区| 潜山县| 新宁县| 玉林市| 天峨县|