微信小程序(组件--表单:交互控件)
【本节大纲】
(1)input输入框组件
(2)textarea多行输入框组件
(3)form表单组件
(4)radio-group单选选择器与radio单选项目
(5)label关联组件
(6)checkbox-group多选选择器与checkbox多选项目
表单组件
(1)input输入框组件
基础属性:
属性 | 类型 | 默认值 | 是否必填 | 作用 |
---|---|---|---|---|
value | string | 无 | 否 | 输入框的初始内容 |
type | string | text | 否 | input 的类型 |
password | boolean | false | 否 | 是否是密码类型 |
disabled | boolean | false | 否 | 是否禁用 |
maxlength | number | 140 | 否 | 最大输入长度,设置为 -1 的时候不限制最大长度 |
placeholder | string | 无 | 否 | 输入框为空时占位符 |
1、type类型—type属性值
值 | 作用 |
---|---|
text | 文本输入键盘 |
number | 数字输入键盘 |
idcard | 身份证输入键盘 |
digit | 带小数点的数字键盘 |
2、占位符placeholder属性
属性 | 类型 | 默认值 | 是否必填 | 作用 |
---|---|---|---|---|
placeholder-style | string | 无 | 否 | 指定 placeholder 的内联样式 |
placeholder-class | string | input-placeholder | 否 | 指定 placeholder 的样式类名 |
<input placeholder="请输入姓名" placeholder-style="color:#e1565b;font-size:20rpx;"></input>
注意:placeholder字体大小默认与input字体大小相同,不能分开设置,不然应用户体验。
方案:给input设置字体大小即可
<input placeholder="请输入姓名"
placeholder-class="placeClassName"></input>
.placeClassName{
color: blue;
}
3、焦点类属性
属性 | 类型 | 默认值 | 是否必填 | 作用 |
---|---|---|---|---|
focus | boolean | false | 否 | 获取焦点,加上后会自动聚焦 |
bindfocus | function | 无 | 否 | 输入框聚焦时触发,event.detail = { value, height },height 为键盘高度 |
bindblur | function | 无 | 否 | 输入框失去焦点时触发,event.detail = {value: value} |
bindfocus:
<input placeholder="请输入姓名"
value="默认初始值"
bindfocus="bindfocusFn"
placeholder-class="placeClassName"></input>
/**获取授权页面相关数据 */
bindopensettingFn(option){
console.log(option)
},
bindblur:
<input placeholder="请输入姓名"
value="默认初始值"
bindfocus="bindfocusFn"
bindblur="bindblurFn"
placeholder-class="placeClassName"></input>
/**输入框失去焦点时触发 */
bindblurFn(option){
console.log(option)
},
4、键盘与键盘按钮
属性 | 类型 | 默认值 | 是否必填 | 作用 |
---|---|---|---|---|
confirm-type | string | done | 否 | 设置键盘右下角按钮的文字,仅在type=’text’时生效 |
cursor-spacing | number | 0 | 否 | 聚焦时光标离软键盘的距离(了解即可) |
bindconfirm | function | 无 | 否 | 点击完成按钮时触发,event.detail = {value: value} |
confirm-type属性值:
值 | 作用 |
---|---|
send | 右下角按钮为“发送” |
search | 右下角按钮为“搜索” |
next | 右下角按钮为“下一个” |
go | 右下角按钮为“前往” |
done | 右下角按钮为“完成” |
一般需要开发人员根据业务的情景选择合适的confirm-type
注意:confirm-type的最终表现与手机输入法本身的实现有关,部分安卓系统输入法和第三方输入法可能不支持或不完全支持。
场景:当填写项较多时,可能超出当前屏幕,此时需要对弹起的软键盘做些处理
cursor-spacing | number | 0 | 否 | 聚焦时光标离软键盘的距离 |
---|
<input placeholder="0" cursor-spacing="0"></input>
<input placeholder="50" cursor-spacing="50"></input>
<input placeholder="100" cursor-spacing="100"></input>
bindconfirm | function | 无 | 否 | 点击完成按钮时触发,event.detail = {value: value} |
---|
<input type="text"
bindconfirm="bindconfirmSearch"
placeholder="请输入搜索商品"
confirm-type="search"></input>
/**点击完成按钮时触发 */
bindconfirmSearch(option){
console.log(option)
},
input输入框现有bug:
- 部分微信版本placeholder 在聚焦时出现重影问题
- 部分机型 focus 属性设置无效
- input 组件是一个原生组件,字体是系统字体,所以无法设置 font-family
(2)textarea多行输入框组件
属性 | 类型 | 默认值 | 是否必填 | 作用 |
---|---|---|---|---|
value | string | 无 | 否 | 输入框的内容 |
placeholder | string | 无 | 否 | 输入框为空时占位符 |
placeholder-style | string | 无 | 否 | 指定 placeholder 的内联样式,目前仅支持color和font-weight,不支持font-size、background等属性 |
placeholder-class | string | textarea-placeholder | 否 | 指定 placeholder 的样式类名 |
disabled | boolean | false | 否 | 是否禁用 |
maxlength | number | 140 | 否 | 最大输入长度,设置为 -1 的时候不限制最大长度 |
auto-focus | boolean | false | 否 | 自动聚焦,拉起键盘 |
auto-height | boolean | false | 否 | 是否自动增高,设置auto-height时,style.height不生效 |
bindinput | function | 无 | 否 | 当键盘输入时,触发 input 事件,event.detail = {value, cursor, keyCode} |
bindconfirm | function | 无 | 否 | 点击完成按钮时触发,event.detail = {value: value} |
应用场景:发表评论或发布帖子,点击按钮跳到评论页面
<button bindtap="commentPage">评论</button>
/**评论 */
commentPage(){
wx.navigateTo({
url: 'comment/comment',
})
},
发布评论页面代码块
<view class="commentArea">
<textarea placeholder="请输入您的评论(最大200字)"
maxlength="200"
auto-focus="true"></textarea>
<button type="primary">取消</button>
<button type="warn">发表</button>
</view>
.commentArea{
width: 100%;
height: 300rpx;
padding: 20rpx 5%;
box-sizing: border-box;
display: flex;
justify-content: space-around;
flex-wrap: wrap;
}
.commentArea textarea{
display: block;
width: 100%;
height: 100%;
position: relative;
z-index: 3;
padding: 10rpx;
box-sizing: border-box;
}
.commentArea textarea::after{
content: "";
width: 200%;
height: 200%;
position: absolute;
left: 0;
top: 0;
border: 1px solid rgba(0, 0, 0, 0.2);
transform: scale(0.5);
transform-origin: 0 0;/**元素缩放基点 */
z-index: 2;
}
.commentArea button{
display: inline-block;
font-size: 30rpx;
margin: 20rpx 0;
line-height: 50rpx;
color: #fff;
}
bindinput | function | 无 | 否 | 当键盘输入时,触发 input 事件,event.detail = {value, cursor, keyCode} |
---|
/**当键盘输入时,触发 input 事件 */
textareaInputFn(option){
console.log(option)
},
bindconfirm | function | 无 | 否 | 点击完成按钮时触发,event.detail = {value: value} |
---|
(3)form表单组件
作用:将组件内的用户输入的switch input checkbox slider radio picker 提交
属性 | 类型 | 默认值 | 是否必填 | 作用 |
---|---|---|---|---|
bindsubmit | function | 无 | 否 | 触发 submit 事件,提交表单数据 event.detail = {value : {‘name’: ‘value’} , formId: ‘’} |
bindreset | function | 无 | 否 | 表单重置时会触发 reset 事件 |
注意:当点击 form 表单中 form-type 为 submit 的 button 组件时,会将表单组件中的 value 值进行提交,需要在表单组件中加上 name 来作为 key
回顾下button按钮组件
form-type触发表单提交/重置操作
属性 | 类型 | 默认值 | 是否必填 | 作用 |
---|---|---|---|---|
form-type | string | 无 | 否 | 用于 form 组件,点击分别会触发 form 组件的 submit提交/reset重置 事件 |
form-type 属性值
值 | 说明 |
---|---|
submit | 提交表单 |
reset | 重置表单 |
form表单组件–提交评论操作
/**提交表单 */
bindsubmitFn(option){
console.log(option)
},
注意:
提交表单时,必要在需要提交信息的表单组件上,加上 name 来作为 key,否则会获取不到相关信息
接下来做些完善,评论完毕后弹框提示,然后返回上一页面
完善一
/*提交表单 /
bindsubmitFn(option){wx.showToast({
title: '评论成功',
duration: 3000,
success(){
setTimeout(function(){
wx.navigateBack({
dalta:1
})
},1000)
}
})
},
接下来接着做完善,提交时验证最少10个字,否则弹框提示
完善二
/*提交表单 /
bindsubmitFn(option){if(option.detail.value.textarea.lenght < 10){
wx.showToast({
icon: 'none',
title: '最少10个字'
})
}else{
wx.showToast({
title: '评论成功',
duration: 3000,
success() {
setTimeout(function () {
wx.navigateBack({
dalta: 1
})
}, 1000)
}
})
}
},
接下来接着做完善,输入字体时,实时监听目前输入多少字
完善三
①实时获取输入时字体数量/*动态监听字数 /
textareaInputFn(option){console.log(option)
},
②接下来接着做完善,输入字体时,实时监听目前输入多少字
.fontCountClass{
position: absolute;
right: 0;
bottom: 0;
font-size: 30rpx;
color: #b1aeae;
}
data: {
fontCount:0
},
/**动态监听字数 */
textareaInputFn(option){
console.log(option.detail.cursor)
this.setData({
fontCount:option.detail.cursor
})
},
form表单组件–取消评论操作
/**重置取消,返回上一页 */
bindresetFn(option){
wx.navigateBack({
delta: 1
})
},
form表单组件–提交评论操作
radio-group单选选择器与radio单选项目
- ①radio-group单项选择器,内部由多个 radio 组成
属性 | 类型 | 默认值 | 是否必填 | 作用 |
---|---|---|---|---|
bindchange | function | 无 | 否 | checkbox-group中选中项发生改变时触发 change 事件,detail = {value:[选中的checkbox的value的数组]} |
- ②radio单选项目
属性 | 类型 | 默认值 | 是否必填 | 作用 |
---|---|---|---|---|
value | string | 无 | 否 | radio 标识。当该radio 选中时,radio-group 的 change 事件会携带radio的value |
checked | boolean | false | 否 | 当前是否选中 |
disabled | boolean | false | 否 | 是否禁用 |
color | string | #09BB07 | 否 | radio的颜色,同css的color |
radio-group单选选择器与radio单选项目
性别:<radio-group>
<radio name="man" checked="true">男</radio>
<radio name="woman">女</radio>
<radio name="no" disabled="true">中性</radio>
</radio-group>
有时单选项目过多时,需要用到循环指令wx:for
爱好:<radio-group>
<label wx:for="{ {likeList}}" wx:key="index">
{ { item.value}}
<radio value="{ {item.name}}" checked="{ {item.checked}}"></radio>
</label>
</radio-group>
likeList:[
{ name: 'swim', value: '游泳' },
{ name: 'climd', value: '爬山',checked:'true' },
{ name: 'fitness', value: '健身' },
{ name: 'sing', value: '唱歌' },
]
bindchange | function | 无 | 否 | checkbox-group中选中项发生改变时触发 change 事件,detail = {value:[选中的checkbox的value的数组]} |
---|
/**单选按钮更改时触发 */
radioChangeFn(option){
console.log(option)
},
form表单组件–关联组件label
- label组件用来改进表单组件的可用性
- 作用:使用for属性找到对应的id,或者将控件放在该标签下,当点击时,就会触发对应的控件。
- 目前可以绑定的控件有:button, checkbox, radio, switch
属性 | 类型 | 默认值 | 是否必填 | 作用 |
---|---|---|---|---|
for | string | 无 | 否 | 绑定控件的 id |
国籍:<radio-group class="countryClass">
<label wx:for="{ {countryList}}" wx:key="index">
<radio value="{ {item.name}}" checked="{ {item.checked}}"></radio>
{ { item.value}}
</label>
</radio-group>
.countryClass label{
display: block;
}
countryList:[
{ name: 'zg', value: '中国' },
{ name: 'mg', value: '美国',checked:true },
{ name: 'jnd', value: '加拿大' },
{ name: 'rb', value: '日本' },
]
form表单组件–多选组件
checkbox-group多选选择器与checkbox多选项目
- checkbox-group多选选择器
属性 | 类型 | 默认值 | 是否必填 | 作用 |
---|---|---|---|---|
bindchange | function | 无 | 否 | checkbox-group中选中项发生改变时触发 change 事件,detail = {value:[选中的checkbox的value的数组]} |
- checkbox多选项目
属性 | 类型 | 默认值 | 是否必填 | 作用 |
---|---|---|---|---|
value | string | 无 | 否 | checkbox标识,选中时触发checkbox-group的 change 事件,并携带 checkbox 的 value |
checked | boolean | false | 否 | 当前是否选中,可用来设置默认选中 |
disabled | boolean | false | 否 | 是否禁用 |
color | string | #09BB07 | 否 | checkbox的颜色,同css的color |
<checkbox-group bindchange="likeChangeFn">
<label wx:for="{ {likeList}}" wx:key="index">
<checkbox value="{ {item.name}}" checked="{ {item.checked}}"></checkbox>
{ { item.value}}
</label>
</checkbox-group>
/**单选按钮更改时触发 */
radioChangeFn(option){
console.log(option)
},
还没有评论,来说两句吧...