小程序七:组件之表单组件

来源:互联网 发布:我做淘宝在哪找货源 编辑:程序博客网 时间:2024/04/30 12:34
button

按钮组件。
属性名类型默认值说明sizeStringdefault有效值default, minitypeStringdefault按钮的样式类型,有效值primary, default, warnplainBooleanfalse按钮是否镂空,背景色透明disabledBooleanfalse是否禁用loadingBooleanfalse名称前是否带 loading 图标formTypeString无有效值:submit, reset,用于form组件,点击分别会触发submit/reset事件hover-classStringbutton-hover指定按钮按下去的样式类。当hover-class="none"时,没有点击态效果
注:button-hover默认为{background-color:rgba(0,0,0,0.1);opacity:0.7;}
示例代码:
index.wxss:
/** wxss **//** 修改button默认的点击态样式类**/.button-hover{  background-color:red;}/** 添加自定义button点击态样式类**/.other-button-hover{  background-color:blur;}

index.wxml:
<button type="default" size="{{defaultSize}}" loading="{{loading}}" plain="{{plain}}"        disabled="{{disabled}}" bindtap="default" hover-class="other-button-hover"> default </button><button type="primary" size="{{primarySize}}" loading="{{loading}}" plain="{{plain}}"        disabled="{{disabled}}" bindtap="primary"> primary </button><button type="warn" size="{{warnSize}}" loading="{{loading}}" plain="{{plain}}"        disabled="{{disabled}}" bindtap="warn"> warn </button><button bindtap="setDisabled">点击设置以上按钮disabled属性</button><button bindtap="setPlain">点击设置以上按钮plain属性</button><button bindtap="setLoading">点击设置以上按钮loading属性</button>

index.js:
var types = ['default', 'primary', 'warn']var pageObject = {  data: {    defaultSize: 'default',    primarySize: 'default',    warnSize: 'default',    disabled: false,    plain: false,    loading: false  },  setDisabled: function(e) {    this.setData({      disabled: !this.data.disabled    })  },  setPlain: function(e) {    this.setData({      plain: !this.data.plain    })  },  setLoading: function(e) {    this.setData({      loading: !this.data.loading    })  }}for (var i = 0; i < types.length; ++i) {  (function(type) {    pageObject[type] = function(e) {      var key = type + 'Size'      var changedData = {}      changedData[key] =        this.data[key] === 'default' ? 'mini' : 'default'      this.setData(changedData)    }  })(types[i])}Page(pageObject)

checkbox

[1]checkbox-group
多选项目组,内部由多个checkbox组成。
checkbox-group内只能包含checkbox
属性名类型默认值说明bindchangeEventHandle checkbox-group中选中项发生改变是触发change事件,detail = {value:[选中的checkbox的value的数组]}
[2]checkbox
多选项目。
属性名类型默认值说明valueString checkbox标识,选中时触发checkbox-group的change事件,并携带checkbox的valuedisabledBooleanfalse是否禁用checkedBooleanfalse当前是否选中,可用来设置默认选中
示例:
index.wxml:
<checkbox-group bindchange="checkboxChange">    <label class="checkbox" wx:for-items="{{items}}">        <checkbox value="{{item.name}}" checked="{{item.checked}}"/>{{item.value}}    </label></checkbox-group>

index.js:
Page({  data: {    items: [      {name: 'USA', value: '美国'},      {name: 'CHN', value: '中国', checked: 'true'},      {name: 'BRA', value: '巴西'},      {name: 'JPN', value: '日本'},      {name: 'ENG', value: '英国'},      {name: 'TUR', value: '法国'},    ]  },  checkboxChange: function(e) {    console.log('checkbox发生change事件,携带value值为:', e.detail.value)  }})

form

将表单内的用户输入的switch input checkbox slider radio picker 提交
属性名类型说明report-submitBoolean是否返回formId用于发送模板消息bindsubmitEventHandle携带form中的数据触发submit事件,event.detail = { value : {"name":"value"} , formId:"" }bindresetEventHandle表单重置时会触发reset事件
示例代码:
index.wxml:
<form bindsubmit="formSubmit" bindreset="formReset">    <view class="section section_gap">        <view class="section__title">switch</view>        <switch name="switch"/>    </view>    <view class="section section_gap">        <view class="section__title">slider</view>        <slider name="slider" show-value ></slider>    </view>    <view class="section">        <view class="section__title">input</view>        <input name="input" placeholder="please input here" />    </view>    <view class="section section_gap">        <view class="section__title">radio</view>        <radio-group name="radio-group">            <label><radio value="radio1"/>radio1</label>            <label><radio value="radio2"/>radio2</label>        </radio-group>    </view>    <view class="section section_gap">        <view class="section__title">checkbox</view>        <checkbox-group name="checkbox">            <label><checkbox value="checkbox1"/>checkbox1</label>            <label><checkbox value="checkbox2"/>checkbox2</label>        </checkbox-group>    </view>    <view class="btn-area">        <button formType="submit">Submit</button>        <button formType="reset">Reset</button>    </view></form>

index.js:
Page({  formSubmit: function(e) {    console.log('form发生了submit事件,携带数据为:', e.detail.value)  },  formReset: function() {    console.log('form发生了reset事件')  }})

input

属性名类型默认值说明valueString 输入框的内容typeStringtextinput的类型,有效值:text,number,idcard,digit,time,datepasswordBooleanfalse是否是密码类型placeholderString 输入框为空时占位符placeholder-styleString 指定placeholder的样式placeholder-classStringinput-placeholder指定placeholder的样式类disabledBooleanfalse是否禁用maxlengthNumber140最大输入长度,设置为0的时候不限制最大长度auto-focusBooleanfalse自动聚焦,拉起键盘。页面中只能有一个input设置auto-focus属性focusBooleanfalse使得input获取焦点bindchangeEventHandle 输入框失去焦点时,触发bindchange事件,event.detail={value:value}bindinputEventHandle 除了date/time类型外的输入框,当键盘输入时,触发input事件,event.detail={value:value},处理函数可以直接return一个字符串,将替换输入框的内容。bindfocusEventHandle 输入框聚焦时触发,event.detail = {value:value}bindblurEventHandle 输入框失去焦点时触发,event.detail = {value:value}
示例代码:
index.wxml:
<view class="section">    <input placeholder="这是一个可以自动聚焦的input" auto-focus/></view><view class="section">    <input placeholder="这个只有在按钮点击的时候才聚焦" focus="{{focus}}" />    <view class="btn-area">        <button bindtap="bindButtonTap">使得输入框获取焦点</button>    </view></view><view class="section">    <input  maxlength="10" placeholder="最大输入长度10" /></view><view class="section">    <view class="section__title">你输入的是:{{inputValue}}</view>    <input  bindinput="bindKeyInput" placeholder="输入同步到view中"/></view><view class="section">    <input  bindinput="bindReplaceInput" placeholder="连续的两个1会变成2" /></view><view class="section">    <input  bindinput="bindHideKeyboard" placeholder="输入123自动收起键盘" /></view><view class="section">    <input type="emoji" placeholder="这是一个带有表情的输入框" /></view><view class="section">    <input password type="number" /></view><view class="section">    <input password type="text" /></view><view class="section">    <input type="digit" placeholder="带小数点的数字键盘"/></view><view class="section">    <input type="idcard" placeholder="身份证输入键盘" /></view><view class="section">    <input placeholder-style="color:red" placeholder="占位符字体是红色的" /></view>

index.js:
Page({  data:{    focus:false,    inputValue:""  },  bindButtonTap:function(){    this.setData({      focus:Date.now()    })  },  bindKeyInput:function(e){    this.setData({      inputValue:e.detail.value    })  },  bindReplaceInput:function(e){    var value = e.detail.value;    var pos = e.detail.cursor;    if(pos != -1){      //光标在中间      var left = e.detail.value.slice(0,pos);      //计算光标的位置      pos = left.replace(/11/g,'2').length;    }    //直接返回对象,可以对输入进行过滤处理,同时可以控制光标的位置    return {      value:value.replace(/11/g,'2'),      cursor:pos    }    //或者直接返回字符串,光标在最后边    //return value.replace(/11/g,'2'),  },  bindHideKeyboard:function(e){    if(e.detail.value === "123"){      //收起键盘      wx.hideKeyboard();    }  }})

label

用来改进表单组件的可用性,使用for属性找到对应的id,或者将控件放在该标签下,当点击时,就会触发对应的控件。
for优先级高于内部控件,内部有多个控件的时候默认触发第一个控件。
目前可以绑定的控件有:buttoncheckboxradioswitch
属性名类型说明forString绑定控件的id
示例代码:
index.wxml:
<view class="section section_gap"><view class="section__title">表单组件在label内</view><checkbox-group class="group" bindchange="checkboxChange">    <view class="label-1" wx:for-items="{{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">label用for标识表单组件</view><radio-group class="group" bindchange="radioChange">    <view class="label-2" wx:for-items="{{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><view class="section section_gap"><view class="section__title">绑定button</view><label class="label-3">    <text>点击这段文字,button会被选中</text></label><view class="btn-area">    <button type="default" name="1" bindtap="tapEvent">按钮</button></view></view><view class="section section_gap"><view class="section__title">label内有多个时选中第一个</view><label class="label-4">    <checkbox> 选中我 </checkbox>    <checkbox> 选不中 </checkbox>    <checkbox> 选不中 </checkbox>    <checkbox> 选不中 </checkbox>    <view class="label-4_text">点我会选中第一个</view></label></view>

index.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)  }})

index.wxss:
.label-1, .label-2{    margin-bottom: 15px;}.label-1__text, .label-2__text {    display: inline-block;    vertical-align: middle;}.label-1__icon {    position: relative;    margin-right: 10px;    display: inline-block;    vertical-align: middle;    width: 18px;    height: 18px;    background: #fcfff4;}.label-1__icon-checked {    position: absolute;    top: 3px;    left: 3px;    width: 12px;    height: 12px;    background: #1aad19;}.label-2__icon {    position: relative;    display: inline-block;    vertical-align: middle;    margin-right: 10px;    width: 18px;    height: 18px;    background: #fcfff4;    border-radius: 50px;}.label-2__icon-checked {    position: absolute;    left: 3px;    top: 3px;    width: 12px;    height: 12px;    background: #1aad19;    border-radius: 50%;}.label-4_text{    text-align: center;    margin-top: 15px;}

picker

滚动选择器,现支持三种选择器,通过mode来区分,分别是普通选择器,时间选择器,日期选择器,默认是普通选择器
普通选择器:mode=selector
属性名类型默认值说明rangeArray[]mode为selector时,range有效valueNumber0mode为selector时,是数字,表示选择了range中的第几个,从0开始。bindchangeEventHandle value改变时触发change事件,event.detail= { value:value}
时间选择器:mode=time
属性名类型默认值说明valueString 表示选中的时间,格式为"hh:mm" String 表示有效时间范围的开始,字符串格式为"hh:mm" String 表示有效时间范围的结束,字符串格式为"hh:mm" EventHandle value改变时触发change事件,event.detail= { value:value}
日期选择器:mode=date
属性名类型默认值说明valueString0表示选中的日期,格式为"yyyy-MM-dd"startString 表示有效日期范围的开始,字符串格式为"yyyy-MM-dd"endString 表示有效日期范围的结束,字符串格式为"yyyy-MM-dd"fieldsStringday有效值year,month,day,表示选择器的粒度bindchangeEventHandle value改变时触发change事件,event.detail= { value:value}

示例代码:
index.wxml:
<view class="section">    <view class="section__title">地区选择器</view>    <picker bindchange="bindPickerChange" value="{{index}}" range="{{array}}">        <view class="picker">            当前选择:{{array[index]}}        </view>    </picker></view><view class="section">    <view class="section__title">时间选择器</view>    <picker mode="time" value="{{time}}" start="09:01" end="21:01" bindchange="bindTimeChange">        <view class="picker">            当前选择: {{time}}        </view>    </picker></view><view class="section">    <view class="section__title">日期选择器</view>    <picker mode="date" value="{{date}}" start="2015-09-01" end="2017-09-01" bindchange="bindDateChange">        <view class="picker">            当前选择: {{date}}        </view>    </picker></view>

index.js:
Page({  data: {    array:["美国","中国","巴西","日本"],    index:0,    date:"2016-09-01",    time:"12:01"  },  bindPickerChange: function(e) {    console.log('picker发送选择改变,携带值为', e.detail.value)    this.setData({      index: e.detail.value    })  },  bindDateChange:function(e){    this.setData({      date:e.detail.value    })  },  bindTimeChange:function(e){    this.setData({      time:e.detail.time    })  }})

radio

[1]radio-group​
单选项目组,内部由多个radio组成
属性名类型默认值说明bindchangeEventHandle radio-group中的选中项发生变化时触发change事件,event.detai = {value : 选中项radio的value
[2]radio
​ 单选项目
属性名类型默认值说明valueString radio标识。当该radio选中时,radio-group的change事件会携带radio的valuecheckedBooleanfalse当前是否选中disabledBooleanfalse是否禁用
index.wxml:
<radio-group class="radio-group" bindchange="radioChange">    <label class="radio" wx:for-items="{{items}}">        <radio value="{{item.name}}" checked="{{item.checked}}"/>{{item.value}}    </label></radio-group>

index.js:
Page({  data: {    items: [      {name: 'USA', value: '美国'},      {name: 'CHN', value: '中国', checked: 'true'},      {name: 'BRA', value: '巴西'},      {name: 'JPN', value: '日本'},      {name: 'ENG', value: '英国'},      {name: 'TUR', value: '法国'},    ]  },  radioChange: function(e) {    console.log('radio发生change事件,携带value值为:', e.detail.value)  }})

slider

滑动选择器
属性名类型默认值说明minNumber0最小值maxNumber100最大值stepNumber1步长,取值必须大于 0,并且可被 (max - min) 整除disabledBooleanfalse是否禁用valueNumber0当前取值show-valueBooleanfalse是否显示当前valuebindchangeEventHandle 完成一次拖动后触发的事件,event.detail = {value:value}
示例代码:
index.wxml:
<view class="section section_gap">    <text class="section__title">设置left/right icon</text>    <view class="body-view">        <slider bindchange="slider1change" left-icon="cancel" right-icon="success_no_circle"/>    </view></view><view class="section section_gap">    <text class="section__title">设置step</text>    <view class="body-view">        <slider bindchange="slider2change" step="5"/>    </view></view><view class="section section_gap">    <text class="section__title">显示当前value</text>    <view class="body-view">        <slider bindchange="slider3change" show-value/>    </view></view><view class="section section_gap">    <text class="section__title">设置最小/最大值</text>    <view class="body-view">        <slider bindchange="slider4change" min="50" max="200" show-value/>    </view></view>

index.js:
var pageData = {}for(var i = 1; i < 5; ++i) {  (function (index) {    pageData[`slider${index}change`] = function(e) {      console.log(`slider${index}发生change事件,携带值为`, e.detail.value)    }  })(i);}Page(pageData)

switch

开关组件
属性名类型默认值说明checkedBooleanfalse是否选中disabledBooleanfalse是否禁用typeStringswitch样式,有效值:switch, checkboxbindchangeEventHandle checked改变时触发change事件,event.detail={ value:checked}
index.wxml:
<view class="section section_gap">    <view class="section__title">type="switch"</view>    <view class="body-view">        <switch checked="{{switch1Checked}}" bindchange="switch1Change"/>    </view></view><view class="section section_gap">    <view class="section__title">type="checkbox"</view>    <view class="body-view">        <switch type="checkbox" checked="{{switch2Checked}}" bindchange="switch2Change"/>    </view></view>

index.js:
var pageData = {  data: {    switch1Checked: true,    switch2Checked: false,    switch1Style: '',    switch2Style: 'text-decoration: line-through'  }}for(var i = 1; i <= 2; ++i) {  (function(index) {    pageData[`switch${index}Change`] = function(e) {      console.log(`switch${index}发生change事件,携带值为`, e.detail.value)      var obj = {}      obj[`switch${index}Checked`] = e.detail.value      this.setData(obj)      obj = {}      obj[`switch${index}Style`] = e.detail.value ? '' : 'text-decoration: line-through'      this.setData(obj)    }  })(i)}Page(pageData)

0 0
原创粉丝点击