麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > 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程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 一区二区久久精品66国产精品 | 九九热视频这里只有精品 | 国产69精品久久99不卡免费版 | 欧美激情性色生活片在线观看 | xxxx69hd一hd72| 最污网站 | 黄色三级网站 | 久久国产秒| 精国品产一区二区三区有限公司 | 日本黄色一级视频 | 色97在线| 爱唯侦察 国产合集 亚洲 | 国产精品99久久久久久大便 | 免费国产网站 | 日日噜噜噜夜夜狠狠久久蜜桃 | 久久网站免费 | 午夜精品一区二区三区免费 | 免费国产自久久久久三四区久久 | 丁香天堂网 | 大学生一级毛片在线视频 | 成人午夜淫片a | 国产精品一区视频 | 久久久久久久久久久av | 热99精品视频 | 精品中文字幕久久久久四十五十骆 | 高清做爰免费无遮网站挡 | 黄色片免费看看 | 国产妇女乱码一区二区三区 | 国产成人精品一区二区仙踪林 | 久久国产精品99久久人人澡 | 国产精品av久久久久久久久久 | 成年毛片 | 久久精品99久久久久久2456 | 亚洲第一成av人网站懂色 | 精品国产一区二区三区四区阿崩 | 欧美一级片免费在线观看 | 九九热免费视频在线观看 | 黄色网址在线免费播放 | 久久精品亚洲国产奇米99 | 天海翼四虎精品正在播放 | 国产一区亚洲 |