揭秘 <input> 中的 const formData = e.detail.value:表单提交的小秘密

✦ 揭秘 中的 const formData = e.detail.value:表单提交的小秘密

嘿,小伙伴们!在微信小程序开发中,表单提交可是个大明星场景,而 const formData = e.detail.value; 就像是幕后的“数据搬运工” 。今天,我们就以一个“疑惑产品上传”页面为例子,聊聊 组件中这行代码的妙用。准备好了吗?让我们带着好奇心和一堆表情,跳进代码的世界吧!


✧ 先来认识一下 e.detail.value:它是谁?

在小程序里,每次用户跟界面互动(比如输入文字、点按钮),都会触发一个“事件” 。这个事件会带着一个包裹——事件对象 e,里面装满了有用的信息。而 e.detail.value 就是这个包裹里最闪亮的小宝贝 。

  • 对于 组件:在
    bindsubmit 事件中,e.detail.value 是一个对象,记录了所有 的输入值。键是 name 属性,值是用户敲进去的内容。
  • 字符串的秘密:不管你设置 type="digit" 还是 type="text" 的值永远是字符串!这是小程序的“铁律” ,一会儿我们会证明给你看。

看看您的代码里这个表单:

<form bindsubmit="submitForm">
  <view class="form-item">
    <text class="label">您购买时的价格text>
    <input class="input" name="price" type="digit" value="{{formData.price}}" placeholder="" />
  view>
  <view class="form-item">
    <text class="label">您购买的渠道text>
    <input class="input" name="channel" value="{{formData.channel}}" placeholder="" />
  view>
  <button form-type="submit">提交线上协助比对button>
form>

用户输入价格“100”和渠道“淘宝”,点击提交后,e.detail.value 会变成:

{
  price: "100",  // 字符串哦,即使 type="digit"
  channel: "淘宝"
}

const formData = e.detail.value:搬运工登场!

好了,现在到了主角出场的时候!在 submitForm 函数里,const formData = e.detail.value;e.detail.value 这个“数据包裹”取出来,交给 formData 这个搬运工 。它的任务很简单:把用户输入的东西整理好,方便后面使用。

在您的代码中:

submitForm: async function(e) {
  if (!this.data.isSubmitting) {
    this.cancel(e);
    return;
  }
  // ... 图片验证 ...
  try {
    const formData = e.detail.value; //  搬运工上岗!
    const data = {
      productId: this.data.productId,
      productName: this.data.productName,
      price: formData.price,       // "100"
      channel: formData.channel,   // "淘宝"
      contact: formData.contact,   // 用户输入的联系方式
      productImages: this.data.productImages,
      purchaseRecords: this.data.purchaseRecords
    };
    await saveFakeRegistration(data, true);
    wx.showToast({ title: '提交成功', icon: 'success' }); //  成功啦!
  } catch (error) {
    wx.showToast({ title: '提交失败', icon: 'none' });   //  出错了
  }
}
  • 搬运的过程e.detail.value 变成了 formData,然后 formData.priceformData.channel 等被塞进 data 对象,和图片数据一起提交。
  • 趣味小剧场:想象 formData 是个快递员 ‍♂️,从用户手里接过包裹(e.detail.value),跑去仓库(data),最后交给后台 API 打包发货!

✸ 为什么 的值是字符串?让我们试试!

您可能会问:“type="digit" 不应该是数字吗?”别急,我们来做个小实验验证一下!

改一下代码,打印类型:

submitForm: async function(e) {
  const formData = e.detail.value;
  console.log('价格:', formData.price);
  console.log('价格类型:', typeof formData.price); // 测试一下!
}
  • 用户输入“100”,点击提交。
  • 输出:
    价格: 100
    价格类型: string
    

哈哈,看到没?即使 type="digit"formData.price 还是个字符串! 这是因为小程序把所有 的值都当字符串处理,方便统一管理。不过别担心,如果需要数字,随时可以用 parseFloat(formData.price) 变身!✨


✿ 在您的表单里有多重要?

在“疑惑产品上传”页面里,const formData = e.detail.value 是整个提交流程的“纽带”:

  • 价格(price):用户输入“100”,formData.price 抓住它。
  • 渠道(channel):输入“淘宝”,formData.channel 打包好。
  • 联系方式(contact):输入“123456789”,formData.contact 也收入囊中。

这些数据跟产品图片和购买记录一起,组成了完整的提交内容。如果没有这行代码,您得手动从每个 里抠数据,那得多麻烦呀!

而且,您的代码还有个“暂存”功能,也用到了它:

cancel: async function(e) {
  const formData = e.detail.value; // 搬运工又来了!
  const data = {
    price: formData.price || '',
    channel: formData.channel || '',
    contact: formData.contact || ''
  };
  await saveFakeRegistration(data, false);
  wx.showToast({ title: '暂存成功', icon: 'success' }); //  存好了
}

✵ 小心这些坑!⚠️

虽然 const formData = e.detail.value 很给力,但也有几个小坑要躲开:

  1. 忘了 name 属性:如果 没写 nameformData 里就找不到它!比如 ,提交后 formData.priceundefined
  2. 字符串陷阱:想算价格总和?formData.price + 50 会变成 "10050"(字符串拼接),赶紧用 parseFloat 救场吧!
  3. 实时更新?:现在是提交时才拿数据,想实时显示“价格:¥100”?得加 bindinput,不然界面就“睡着”了。

✷ 给它加点料:实时更新玩法!

想让表单更炫酷?试试实时更新!加个 bindinput,让界面“活”起来:

<input name="price" type="digit" value="{{formData.price}}" bindinput="updateFormData" data-field="price" />
<view>实时价格:¥{{formData.price}}view>
updateFormData(e) {
  const field = e.currentTarget.dataset.field;
  this.setData({ [`formData.${field}`]: e.detail.value });
},
submitForm: async function(e) {
  const formData = e.detail.value; // 照旧用它!
  // 提交逻辑...
}

用户输入“100”,界面立刻显示“实时价格:¥100”!是不是很有趣?


✪ 总结:搬运工的日常

const formData = e.detail.value 组件在表单提交中的好帮手,把用户输入从 e.detail.value 搬到你的代码里。它简单、直接,但在您的“疑惑产品上传”页面中却不可或缺!从价格到渠道,再到联系方式,它默默支撑着数据提交的全流程。加上一点小心和创意(比如实时更新),您的表单会更好玩、更实用!✨

怎么样,是不是觉得这行代码有点可爱了?下次写表单时,给它点个赞吧! 有问题欢迎留言,我们一起聊聊小程序的奇妙世界!


你可能感兴趣的:(微信小程序WxMa,input)