微信小程序:双表单单按钮提交技巧

版权声明:Callback_heaven©版权所有 https://blog.csdn.net/weixin_41564885/article/details/82659753

近日开发微信小程序中,遇到了双表单单按钮提交问题。

首先:微信小程序中的form组件:

<form bindsubmit="formSubmit">
...
<button class="primary" formType="submit" >提交</button>
</form>

bindsubmit所对应提交的方法

button中formType所对应表单的提交

这个时候问题就显现出来了:

当我们同一个页面,同一个form表单中包括两种想要提交的不同数据,该如何处理?

首先我们看xhtml中的写法(这里制作的是一套卷子使用iviewUI):这里可以看出我想要通过一个submit提交两个不同的试卷

<form bindsubmit="formSubmit">
 <view>
     <view class="page">
      <!-- 二层判断 -->
       <i-cell  i-class="borderTop">单选</i-cell>
            <view>
                <view>
                      题目1名称
                </view>
                <view >
                    <view class="section section_gap">
                     <radio-group class="radio-group" name="题目1">
                       <label >  
                      <radio class="radio" value="题目1内容"}}'>
                         <text style="font-size:15px;line-height:26rpx">
                               题目内容
                          </text>
                       </radio>
                     </label>
                            </radio-group>
                        </view>
                    </view>
                </view>
            </view>
        </view>
 <!-- @另一套卷子-->
   <view>
        <text>试卷名</text>
   </view>
    <view>
        <view class="page">
            <!-- 二层判断 -->
            <view >
                <i-cell>单选</i-cell>
                <view>
                    <view>
                        <text>
                            题目2名称
                        </text>
                    </view>
                    <view>
                        <view class="section section_gap">
                            <radio-group class="radio-group" >
                                <label>
                                    <radio class="radio" value="题目2">
                                        <text>
                                            题目内容
                                        </text>
                                    </radio>
                                </label>
                            </radio-group>
                        </view>
                    </view>
                </view>
            </view>
        </view>
   <button class="primary" formType="submit"">提交</button>
</form>

我们看formSubmit方法:

formSubmit: function(e) {
    var that = this,
    wx.request({
      method: "POST",
      url: ***** ,
      data: {
        answer: e.detail.value
      },
      success: function(ret) {
        wx.showToast({
          title: "提交成功",
          icon: "success",
          duration: 1000
        });
        setTimeout(function() {
          wx.navigateBack({});
        }, 1000);
      }
    });
  },

这个方法中所实现的功能是:提交表单,如果提交成功1S后返回上一页

但是这里有个问题:此处的e.detail.value所指的是form表单中所有组件的name值

当form提交出去以后显示发送数据的格式是:

扫描二维码关注公众号,回复: 3255549 查看本文章

answer:{"题目1":"题目1内容","题目2","题目2内容"}

但是后台需要我们处理成这种格式:

allAnswer:[
answer1:[{"题目1":"题目1内容"}],
answer2:[{"题目2":"题目2内容"}]
]

这个时候就要在js中对数据进行处理了:

//首先在data中定义好发送所需要的数组/对象:
data{
   answer1:{}
   answer2:{},
   allAnswer:[]
}
//然后在formSubmit中进行处理
  formSubmit: function(e) {
    var that = this;
    var answer1 = that.data.answer1;
    var answer2 = that.data.answer2;
    var allAnswer = that.data.allAnswer;
    var value = e.detail.value //定义value为获取到的全部表单组件值
    for (var a in value) {     //使用for in 遍历拿出key和value
      if(a.indexOf('题目1') != -1){    //这里的条件根据所需可以任意更改
        //每一位进行比对,符合条件的按照所需格式赋值
        //这里可以赋值为需要的格式
        answer1 [a] = value[a]
        that.setData({
          answer1 : answer1 
        })
      }
    if(a.indexOf('题目2') != -1){
        //array的每一位与value的每一位对应
        array[a] = value[a];
        //这里可以赋值为需要的格式
        answer2 [a] = value[a]
        that.setData({
          answer2 : answer2 
        })
      }
    }
    allAnswer = {
      ["answer1"]: answer1 ,
      ["answer2"]: answer2
    };
    wx.request({
      method: "POST",
      url: ****** ,
      data: {
        allanswer: allanswer,
      },
      success: function(ret) {
        that.setData({
          isDisable: true
        });
        wx.showToast({
          title: "提交成功",
          icon: "success",
          duration: 1000
        });
        setTimeout(function() {
          wx.navigateBack({});
        }, 1000);
      }
    });
  },

这个时候发送出的东西已经完美的显现了。

该文章所阐述最主要的思想是:

解决这种类似的form表单提交数据处理的事情,可以多利用for...in循环来对key和value进行详细

的条件判断等操作,最后通过对应关系重新组成所需要的数据,再发送即可。

猜你喜欢

转载自blog.csdn.net/weixin_41564885/article/details/82659753