表单

<form>
<form>和其中的大多数表单元素,基本同HTML5保持一致;具体效果视真机系统而定
表单数据提交时,请确保每个表单元素都指定属性 name;value可以由事件获取
请为每个表单元素都指定样式类 class
应初始化表单元素样式,如主题颜色和其它属性;部分需要配合类共同设置
组件还有一个共同属性:disabled
radio,
checkbox{
    zoom:0.8;
}            
一定要预览。。。一定要预览。。。一定要预览。。。

表单容器;行内元素 inline

默认情况下,表单大小为0,即使添加了表单元素

生产环境下,通常是 垂直方向 分布各表单元素

为了 优雅分隔 各表单元素,通常增加一个内层元素<view>,由它布局,而仅仅将<form>当作一个 功能元素

<form bindsubmit="submit">
    <view class="form-cont">
        // 其它表单元素
        //按钮指定表单类型,可以触发表单的默认提交行为
        <button form-type="submit">submit</button>
    </view>
</form>
.form-cont {
    display: flex;
    flex-direction: column;
    gap: 10px;
    width: 80%;
    padding: 10px;
    background-color: #f40;
    margin: 0 auto;
    }

表单事件:提交和重置

事件 说明
bindsubmit 数据提交;默认
bindreset 表单重置时会触发 reset 事件

提交时,可以在事件对象 e.detail 中获取表格各元素的值;需要配合指定了 form-type 为 submit 属性的按钮 <button> 一起使用,见上面示例的结构

多数情况下,抛弃表单元素 <form>,使用普通结构,通过 数据双向绑定 和自定义事件提交数据

submit(e) {
    console.log(e.detail);
}

功能强大的按钮;有特定的类型属性和事件属性;块元素 block

如果设置了高度后,记得设置同样大小的行高,以确保文字垂直方向居中

除了默认的 tap 事件外,按钮其它事件大多和相应的开发能力关联

更多信息,请访问 官方文档 - button

属性 说明
loading 是否带 loading 图标;然并卵
form-type 按钮类型;点击触发 form 的submit/reset 事件
submit:单击后,默认行为是提交表单
reset:单击后,默认行为是重置表单
open-type 微信开放能力
chooseAvatar:获取用户头像
contact:客服
getPhoneNumber:获取用户手机(企业号)
getUserInfo:获取用户信息(接口被收回)
bindchooseavatar 获取用户头像回调,返回头像临时地址;配合 open-type 使用
bindcontact 客服消息回调;配合 open-type 使用

开发能力 open-type 的使用,要随时关注官方接口的更新变化

在调试器中,查看按钮的代理样式,体会样式初始化的重要性

button{
    width: 100%!important;
    background-color: var(--themeColor);
    color: #fff;    
}            

部分样式需要在特定页面的类中设置

.btn{
    padding: 0;
    margin: 0;
    font-weight: normal;
    border-radius: 0;
}

打开客服对话框 - 用户点击后,打开客服对话框

<button open-type="contact" bindcontact='getContact'>getContact</button>
getContact(e){
    console.log(e);
}

选择用户头像 - 用户点击后,打开头像选择对话框

<button open-type="chooseAvatar" bindchooseavatar='getAvatar'>getAvatar</button>
getAvatar(e){
    console.log(e.detail);//http://tmp/bi86Wd1sI41s8ea8eb984c16d03bff787972d38e3ce6.jpg
}

行内元素 inline,用以扩展用户点击、改善用户体验

使用属性 for,配合指定了 id 的表单元素,如<input>、<radio>、<checkbox>,可以改进表单组件的可用性

<checkbox value="撸码" id="code" /><label for="code">撸码</label>

或:使用 <label> 包裹表单元素,此时应略去for属性

<label>
    <checkbox color="#3498db" value="撸码" />撸码
</label>

单行文本输入框;块元素 block

原生组件,字体是系统字体,无法设置 font-family

更多信息,请访问 官方文档 - input

属性 说明
value 输入框初始内容;字符串;必填
type 输入框类型
text:文本键盘;默认
number:数字键盘
digit:带小数点的数字键盘
idcard:身份证键盘
nickname:昵称键盘
safe-password:密码
password 是否是密码类型;布尔;默认假
placeholder 输入框为空时占位符;字符串
placeholder-style 指定样式;仅支持设置颜色、大小和字重;需预览查看效果
placeholder-class 指定样式类;仅支持设置颜色、大小和字重;推荐
maxlength 最大输入长度;数字
focus 获取焦点;直接拉起键盘便于输入;但是用户欣赏不到你的设计
confirm-type 设置键盘右下角按钮的文字,仅适用text类型
send:发送
search:搜索
next:下一个
go:前往
done:完成;默认
bindinput 键盘输入时触发
bindfocus 输入框聚焦时触发
bindblur 输入框失去焦点时触发
bindconfirm 点击完成按钮时触发

普通文本输入 - text

<view class="item">
    <text>昵称</text>
    <input class="ipt" type="text" name="uname" placeholder="您的昵称" maxlength="8" value="{{user.uname}}" />
</view>

昵称输入 - nickname;会自动拉取你的微信昵称

<view class="item">
    <text>昵称</text>
    <input class="ipt" type="nickname" name="uname" placeholder="您的昵称" maxlength="8" value="{{user.uname}}" />
</view>

密码输入 - safe-password;隐藏真实信息

<view class="item border-btm">
    <text>密码</text>
    <input class="ipt" type="safe-password" name="upass" placeholder="您的密码" maxlength="8" value="{{user.upass}}" />
</view>

数值型输入 - digit;打开数字键盘,需要在手机端查看效果

<view class="item border-btm">
    <text>学号</text>
    <input class="ipt" type="digit" name="usn" placeholder="您的学号" maxlength="8" value="{{user.usn}}" />
</view>

多选一组件:单选按钮和单选按钮组

行内块元素 inline-block

HTML中,需要给每个 <radio> 指定 name 以确保是一组;微信小程序中,只需要给 <radio-group> 指定 name 即可

更多信息,请访问 官方文档 - radio

属性 说明
value 单选按钮的值
checked 当前是否选中
color 单选按钮选中时的颜色
bindchange 选中项发生改变时触发;从事件对象e.detail获取当前选中的值
<radio-group bindchange="getGender" name="ugender">
    <radio color="#3498db" value="男" checked />男
    <radio color="#3498db" value="女" />女
</radio-group>

利用给定的数据和当前值是否相等来决定哪个是选中状态;使用 <label> 改写下例,提升用户体验

<radio-group bindchange="getGender" name="ugender">
    <radio color="#3498db" value="男" checked="{{user.ugender=='男'}}" />男
    <radio color="#3498db" value="女" checked="{{user.ugender=='女'}}" />女
</radio-group>
getGender(e){
    console.log(e.detail.value);
}

行内块元素 inline-block

多选按钮;多选按钮组

更多信息,请访问 官方文档 - checkbox

属性 说明
value 多选按钮的值;数组
checked 当前是否选中
color 多选按钮选中时的颜色
bindchange 选中项发生改变时触发;从事件对象e.detail获取当前选中的值( 数组

使用 <label> 改写下例,提升用户体验

<checkbox-group bindchange="getLike" name='ulike'>
    <checkbox color="#3498db" value="撸码" />撸码
    <checkbox color="#3498db" value="睡觉" checked/>睡觉
    <checkbox color="#3498db" value="电玩" />电玩
    <checkbox color="#3498db" value="唱歌" checked/>唱歌
    <checkbox color="#3498db" value="跳舞" />跳舞
    <checkbox color="#3498db" value="美食" checked/>美食
</checkbox-group>
getLike(e){
    console.log(e.detail.value);
}

多行输入;默认大小300*150;块元素 block

显式 的设置宽度和容器保持一样大小;同时设置内边距padding以使得文字内收一定距离

最大长度140个字符

更多信息,请访问 官方文档 - textarea

属性 说明
value 输入框初始内容;字符串;必填
placeholder 输入框为空时占位符;字符串
maxlength 最大输入长度;数字
focus 获取焦点
confirm-type 设置键盘右下角按钮的文字,仅适用text类型
send:发送
search:搜索
next:下一个
go:前往
done:完成;默认
bindfocus 输入框聚焦时触发
bindinput 键盘输入时触发;组合使用
bindblur 输入框失去焦点时触发;组合使用
bindconfirm 点击完成按钮时触发;组合使用
bindlinechange 输入框行数变化时调用
<view>
    <text>简介</text>
    <textarea name="udesc" value="{{user.udesc}}" />
</view>
textarea{
    width: 100%;
    padding: 20rpx;
}

块元素 block

从底部弹起的滚动选择器,如:时间选择器、日期选择器、地区选择器

除了下述通用的属性外,不同的mode,picker拥有不同的属性;如时间类的都有开始start、结束end等

更多信息,请访问 官方文档 - picker

属性 说明
mode 模式
selector:普通选择器
multiSelector:多列选择器
time:时间选择器;hh:mm
date:日期选择器;YYYY-MM-DD
region:省市区选择器
range 数据列表|范围
bindcancel 取消选择时触发
bindchange 选择时触发

弹出菜单 - ind和list是data中的数据

<picker 
    mode="selector" 
    value="{{ind}}" 
    range="{{list}}" 
    bindchange="pick"
>
    {{list[ind]}}
</picker>
pick(e){
    console.log(e.detail.value)
}

时间选择 - time;可以指定起始 start和结束 end

<picker 
    mode="time" 
    value="{{time}}" 
    bindchange="selTime"
>
    {{time]}}
</picker>
selTime(e){
    this.setData({
        time: e.detail.value
    })
}

日期选择 - date;通常应指定起始 start和结束 end

<picker 
    mode="date" 
    value="{{user.ubirth}}" 
    start="2000-07-01"
    end="2026-12-31"
    bindchange="selDate"
>
    {{user.ubirth}}
</picker>
selDate(e){
    this.setData({
        date: e.detail.value
    })
}

地区选择 - region;e.detail.value返回一个数组:省、市、区;可以不使用地图实现选择

<picker 
    mode="region" 
    value="{{region}}" 
    bindchange="selRegion"
>
    {{region}}
</picker>
selRegion(e){
    this.setData({
        region: e.detail.value
    })
}

块元素 block

滑动选择器

更多信息,请访问 官方文档 - slider

属性 说明
min 最小值
max 最大值
step 步长
show-value 是否显示值;默认不显示
backgroundColor 背景条的颜色
activeColor 已选择的颜色
block-size 滑块的大小,取值范围为 12 - 28
block-color 滑块颜色
bindchange 拖动后触发
bindchanging 拖动过程中触发

年龄选择

<slider 
    activeColor="#3498db" 
    backgroundColor="#ccc" 
    block-size="24" 
    block-color="#3498db" 
    bindchange="selAge" 
    min="18" 
    max="24" 
    name="uage" 
    value="{{user.uage}}" 
    show-value 
/>
selAge(e){
    console.log(e.detail.value)
}

播放进度调节

行内块元素 inline-block

开关选择器

也可以使用checkbox实现功能

更多信息,请访问 官方文档 - switch

属性 说明
checked 是否选中
color 已选择的颜色
type switch, checkbox;默认是switch
bindchange 选择后触发