微信小程序的表单和web的表单很相似,如代码所示:
<from bindsubmit="formSubmit" bindreset="formReset">
<text>联系人</text>
<input vlaue="白木乔" ></input>
<radio-group>
<radio wx:for="{{items}}"></radio>
</radio-group>
<text>手机号</text>
<input password='true'></input>
<text>评价</text>
<textarea placeholder="请给我们的服务提出宝贵的意见" name="textarea"/>
<button form-type="submit"> 提交 </button>
</from>
这是一个非常简单并且常用的一个表单形式,由<from/>表单,<input/>输入框,<radio/>单选框,<textarea/>多行输入框,<button/>按钮 ,除此之外,表单中还通常会用到<checkbox/>复选框,<picker/>从底部弹起的滚动选择器,<pick-view/>嵌入页面的滚动选择器,<slider/>滑动选择器,<switch/>开关选择器 等一些组件。这些都是很容易上手的组件,重点是通过wxss样式能让他们更加好看。
除了上面介绍的一些关于表单的组件,还有一个组件是<label/>,下面重点介绍一下:
<label/>是用来改进表单组件的可用性,使用for
属性找到对应的id
,或者将控件放在该标签下,当点击时,就会触发对应的控件。
for
优先级高于内部控件,内部有多个控件的时候默认触发第一个控件。
目前可以绑定的控件有:<button/>
, <checkbox/>
, <radio/>
, <switch/>
。
给个例子很容易理解
<view class="section section_gap">
<view class="section__title">复选框</view>
<checkbox-group class="group" bindchange="checkboxChange">
<view class="label-1" wx:for="{{checkboxItems}}">
<label>
<checkbox hidden value="{{item.name}}" checked="{{item.checked}}"></checkbox>
<view class="label-1__icon">
<view class="label-1__icon-checked" style="opacity:{{item.checked ? 1: 0}}"></view>
</view>
<text class="label-1__text">{{item.value}}</text>
</label>
</view>
</checkbox-group>
</view>
<view class="section section_gap">
<view class="section__title">单选框</view>
<radio-group class="group" bindchange="radioChange">
<view class="label-2" wx:for="{{radioItems}}">
<radio id="{{item.name}}" hidden value="{{item.name}}" checked="{{item.checked}}"></radio>
<view class="label-2__icon">
<view class="label-2__icon-checked" style="opacity:{{item.checked ? 1: 0}}"></view>
</view>
<label class="label-2__text" for="{{item.name}}"><text>{{item.name}}</text></label>
</view>
</radio-group>
</view>
.js
Page({
data: {
checkboxItems: [
{name: 'USA', value: '美国'},
{name: 'CHN', value: '中国', checked: 'true'},
{name: 'BRA', value: '巴西'},
{name: 'JPN', value: '日本', checked: 'true'},
{name: 'ENG', value: '英国'},
{name: 'TUR', value: '法国'},
],
radioItems: [
{name: 'USA', value: '美国'},
{name: 'CHN', value: '中国', checked: 'true'},
{name: 'BRA', value: '巴西'},
{name: 'JPN', value: '日本'},
{name: 'ENG', value: '英国'},
{name: 'TUR', value: '法国'},
],
hidden: false
},
checkboxChange: function(e) {
var checked = e.detail.value
var changed = {}
for (var i = 0; i < this.data.checkboxItems.length; i ++) {
if (checked.indexOf(this.data.checkboxItems[i].name) !== -1) {
changed['checkboxItems['+i+'].checked'] = true
} else {
changed['checkboxItems['+i+'].checked'] = false
}
}
this.setData(changed)
},
radioChange: function(e) {
var checked = e.detail.value
var changed = {}
for (var i = 0; i < this.data.radioItems.length; i ++) {
if (checked.indexOf(this.data.radioItems[i].name) !== -1) {
changed['radioItems['+i+'].checked'] = true
} else {
changed['radioItems['+i+'].checked'] = false
}
}
this.setData(changed)
}
})