最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS多個(gè)表單數(shù)據(jù)提交下的serialize()應(yīng)用實(shí)例分析

 更新時(shí)間:2019年08月27日 11:21:52   作者:zhensg  
這篇文章主要介紹了JS多個(gè)表單數(shù)據(jù)提交下的serialize()應(yīng)用,接合實(shí)例形式分析了原生javascript實(shí)現(xiàn)多個(gè)表單提交時(shí)serialize操作相關(guān)使用技巧與操作注意事項(xiàng),需要的朋友可以參考下

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

在實(shí)際開發(fā)場景中,難免遇到需要多個(gè)表單的數(shù)據(jù)傳遞問題。

之所以要進(jìn)行多表單的數(shù)據(jù)傳遞是因?yàn)榭梢赃M(jìn)行數(shù)據(jù)分組,便于數(shù)據(jù)的維護(hù)。

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

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("&");
}

對(duì)于讀過《JavaScript高級(jí)程序設(shè)計(jì)》的小伙伴來說,這個(gè)函數(shù)肯定不陌生;

但是如果我們傳遞的是一個(gè)對(duì)象,那么這個(gè)函數(shù)顯然就不符合要求,而在這個(gè)開發(fā)需求下,我們改下這個(gè)函數(shù),改造后函數(shù)如下

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);
                  }
                  //將數(shù)據(jù)改為對(duì)象形式
                  Object.defineProperty(parts, encodeURIComponent(field.name), {
                    value:encodeURIComponent(optValue),
                    enumerable:true //為真表示可枚舉,只有可枚舉才能出現(xiàn)在JSON.stringify()轉(zhuǎn)換的json數(shù)據(jù)中
                  });
                }
              }
            }
            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){
              //構(gòu)建對(duì)象
              Object.defineProperty(parts, encodeURIComponent(field.name), {
                    value:encodeURIComponent(field.value),
                    enumerable:true  //為真表示可枚舉,只有可枚舉才能出現(xiàn)在JSON.stringify()轉(zhuǎn)換的json數(shù)據(jù)中
                  });
            }
        }
      }
      console.log(parts);
      return parts;
}

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

注意:

利用Object.defineProperty創(chuàng)建對(duì)象,要加上 enumerable:true,否則json格式中不會(huì)出現(xiàn)對(duì)應(yīng)的對(duì)象數(shù)據(jù)。這個(gè)純粹是JSON.stringify()的要求。

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運(yùn)行工具http://tools.jb51.net/code/HtmlJsRun測試上述代碼運(yùn)行效果。

更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《JavaScript操作DOM技巧總結(jié)》、《JavaScript頁面元素操作技巧總結(jié)》、《JavaScript事件相關(guān)操作與技巧大全》、《JavaScript查找算法技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • js讀取csv文件并使用json顯示出來

    js讀取csv文件并使用json顯示出來

    這篇文章主要介紹了js讀取csv文件并使用json顯示出來,需要的朋友可以參考下
    2015-01-01
  • zTree插件之多選下拉菜單實(shí)例代碼

    zTree插件之多選下拉菜單實(shí)例代碼

    zTree插件之多選下拉菜單實(shí)例代碼。需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2013-11-11
  • JavaScript實(shí)現(xiàn)網(wǎng)頁版的五子棋游戲

    JavaScript實(shí)現(xiàn)網(wǎng)頁版的五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)網(wǎng)頁版的五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 一文詳解JavaScript中的事件循環(huán)(event?loop)機(jī)制

    一文詳解JavaScript中的事件循環(huán)(event?loop)機(jī)制

    JavaScript中的事件循環(huán)(Event?Loop)是一種重要的機(jī)制,用于管理異步代碼的執(zhí)行,它確保?JavaScript?單線程環(huán)境中的任務(wù)按照正確的順序執(zhí)行,同時(shí)允許異步操作如定時(shí)器、網(wǎng)絡(luò)請求和事件處理,本將給大家詳細(xì)的介紹一下JavaScript事件循環(huán)機(jī)制,感興趣的朋友可以參考下
    2023-12-12
  • js獲取url參數(shù)值的兩種方式

    js獲取url參數(shù)值的兩種方式

    js獲取url參數(shù)值的方法有很多,下面也為大家介紹兩種,喜歡的朋友可以測試下,希望對(duì)大家有所幫助
    2013-09-09
  • 微信小程序?qū)崿F(xiàn)同一頁面取值的方法分析

    微信小程序?qū)崿F(xiàn)同一頁面取值的方法分析

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)同一頁面取值的方法,結(jié)合實(shí)例形式分析了微信小程序在同一頁面取值的常見情況與具體操作技巧,需要的朋友可以參考下
    2019-04-04
  • 學(xué)習(xí)javascript面向?qū)ο?理解javascript對(duì)象

    學(xué)習(xí)javascript面向?qū)ο?理解javascript對(duì)象

    這篇文章主要介紹了javascript對(duì)象,學(xué)習(xí)javascript面向?qū)ο?,感興趣的小伙伴們可以參考一下
    2016-01-01
  • JavaScript實(shí)現(xiàn)動(dòng)態(tài)生成表格案例詳解

    JavaScript實(shí)現(xiàn)動(dòng)態(tài)生成表格案例詳解

    本文主要介紹了通過JavaScript實(shí)現(xiàn)一個(gè)動(dòng)態(tài)添加表格的案例,當(dāng)點(diǎn)擊添加按鈕時(shí),可以彈出一個(gè)表單,然后將輸入的內(nèi)容添加到表格中,也可以將表格中的整行內(nèi)容清除。感興趣的可以學(xué)習(xí)一下
    2021-12-12
  • 一起來了解下Swiper插件的使用和介紹

    一起來了解下Swiper插件的使用和介紹

    這篇文章主要為大家詳細(xì)了解了Swiper插件的使用和介紹,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • 詳解JS函數(shù)重載

    詳解JS函數(shù)重載

    本文主要介紹了利用JavaScript中的特殊對(duì)象arguments來模擬函數(shù)重載的解決方案,非常的實(shí)用,給需要的小伙伴參考下
    2014-12-12

最新評(píng)論

历史| 华坪县| 佛坪县| 兰西县| 北安市| 诸暨市| 唐山市| 台北县| 铁力市| 儋州市| 崇义县| 铜鼓县| 丁青县| 张家界市| 合川市| 盐源县| 阳春市| 广州市| 怀安县| 扶绥县| 宣威市| 庆元县| 富顺县| 建阳市| 邳州市| 辉南县| 潞城市| 通化市| 卢湾区| 扬中市| 遵义市| 神农架林区| 武安市| 靖远县| 石楼县| 关岭| 广安市| 镇安县| 新密市| 开化县| 徐汇区|