UNPKG

swan-docs

Version:
755 lines (624 loc) 27.2 kB
--- title: 表单 header: develop nav: component sidebar: form --- form --- ### button <div class="notice">解释: </div>按钮 <div></div> |属性名 |类型 |默认值 |说明| |---- | ---- | ---- |---- | |size|String | default |大小| | type | String | default |类型| | plain | Boolean |false |按钮是否镂空,背景色透明| |form-type |String | |用于`<form/>`组件,点击分别会触发`<form/>`组件的 submit/reset 事件| |open-type | String | |手百开放能力,比如分享、获取用户信息等等| |hover-class |String |button-hover |点击态。指定按钮按下去的样式类。当 hover-class="none" 时,没有点击态效果。 button-hover 默认为{background-color: rgba(0, 0, 0, 0.1); opacity: 0.7;}| | hover-stop-propagation|Boolean|false |指定是否阻止本节点的祖先节点出现点击态| |hover-start-time | Number |20 |按住后多久出现点击态,单位毫秒| |hover-stay-time|Number | 70 |手指松开后点击态保留时间,单位毫秒| | bindgetuserinfo |Handler | |用户点击该按钮时,会返回获取到的用户信息,从返回参数的 detail 中获取到的值,和 swan.getUserInfo 一样的。和 open-type 搭配使用, 使用时机: open-type="getUserInfo"| | bindgetphonenumber |Handler | |获取用户手机号回调。和 open-type 搭配使用, 使用时机: open-type="getphonenumber"| **size有效值:** |值 |说明| |---- |---- | | default |无 | | mini |无 | **type有效值:** |值 |说明| |---- |---- | |primary |无| | default |无| | warn |无| **open-type有效值:** |值 |说明| |---- |---- | |share |触发用户分享,使用前建议先阅读 swan.onShareAppMessage 用法| | getUserInfo |获取用户信息,可以从 bindgetuserinfo 回调中获取到用户信息| | getPhoneNumber |获取用户手机号,可以从 bindgetphonenumber 回调中获取到用户信息| <notice>示例: </notice> ```css /** button.css **/ /** 修改 button 点击态样式**/ .button-hover { background-color: green; } /** 添加自定义 button 点击态样式类**/ .other-button-hover { background-color: blue; } ``` ```xml <!-- button.swan--> <button type="default" size="mini" disabled="true" hover-class="other-button-hover">我是 button </button> ``` ### checkbox-group <div class="notice">解释: </div>多项选择器 <div></div> **内部由多个 checkbox 组成** |属性名 |类型 |默认值 |说明| |---- | ---- | ---- |---- | |bindchange | EventHandle ||`<checkbox-group/>`中选中项发生改变时触发 change 事件,detail = {value:[选中的checkbox的value的数组]}| ### checkbox <div class="notice">解释: </div>多选项目 <div></div> |属性名 |类型 |默认值 |说明| |---- | ---- | ---- |---- | |value | String ||`<checkbox/>`标识,选中时触发`<checkbox-group/>`的 change 事件,并携带`<checkbox/>`的 value| |disabled|Boolean| false| 是否禁用| |checked|Boolean | false| 当前是否选中,可用来设置默认选中| |color| Color| | checkbox 的颜色,同 CSS 的 color| <notice>示例: </notice> ```xml <!-- checkbox.swan --> <form bind:submit="formSubmit"> <checkbox-group bind:change="checkboxChange" name="citylist"> <view class="checkbox" s-for="item in items"> <checkbox value="{{item.value}}" checked="{{item.checked}}">{{item.text}}</checkbox> </view> <view class="checkbox"> <checkbox value="red" color="red">我是红色的</checkbox> </view> <view class="checkbox"> <checkbox value="disabled" disabled>我不可用</checkbox> </view> </checkbox-group> <button formType="submit">提交</button> <button formType="reset">重置</button> </form> ``` ```javascript // checkbox.js Page({ data: { items: [ { value: 'China', text: '中国' }, { value: 'US', text: '美国' }, { value: 'Britain', text: '英国', checked: true } ] }, checkboxChange(e) { console.log(e.detail); }, formSubmit(e) { // todo someThing } }); ``` ### form <div class="notice">解释: </div>表单 <div></div> 将组件内的用户输入的`<switch/> <input/> <checkbox/> <slider/> <radio/> <picker/>`提交。 当点击`<form/>`表单中 form-type 为 submit 的`<button/>`组件时,会将表单组件中的 value 值进行提交,需要在表单组件中加上 name 来作为 key。 |属性名 |类型 |说明| |-----|---- |---- | | bindsubmit | EventHandle |携带 form 中的数据触发 submit 事件,event.detail = {value : {'name': 'value'}} | | bindreset | EventHandle |表单重置时会触发 reset 事件| <notice>示例: </notice> ```xml <form bindsubmit="formSubmitHandle" bindreset="formReset"> <view class="btn-area"> <view class="section-title">input输入框</view> <input name="input" placeholder="please input here~~~" /> </view> <view class="btn"> <button class="form-button" form-type="submit">提交</button> <button class="form-button" form-type="reset">重置</button> </view> </form> ``` ```javascript Page({ formSubmitHandle: function(e) { console.log('啊哈哈哈哈,form表单submit了:', e.detail.value) }, formReset: function() { console.log('哦豁,form表单被reset了') } }) ``` ### input <div class="notice">解释: </div>输入框 <div></div> |属性名 |类型 |默认值 |说明| |---- | ---- | ---- |---- | | value | String ||输入框的初始内容| | type | String |text |input 的类型| | password | Boolean | false |是否是密码类型| | placeholder | String | |输入框为空时占位符| |placeholder-style| String | | placeholder 的样式| |placeholder-class | String |input-placeholder |placeholder 的样式类| | disabled | Boolean | false |是否禁用| | maxlength | Number | 140 |最大输入长度,设置为 -1 的时候不限制最大长度| |cursor-spacing |Number |0 |指定光标与键盘的距离,单位 px 。取 input 距离底部的距离和 cursor-spacing 指定的距离的最小值作为光标与键盘的距离| | focus |Boolean | false |获取焦点 | |confirm-type|String | done |设置键盘右下角按钮的文字| |confirm-hold | Boolean | false |点击键盘右下角按钮时是否保持键盘不收起| |cursor | Number | |指定 focus 时的光标位置| |selection-start | Number | -1 | 光标起始位置,自动聚集时有效,需与 selection-end 搭配使用 <font color="#4183c4">百度 APP 10.10 以上</font>| |selection-end | Number | -1 | 光标结束位置,自动聚集时有效,需与 selection-start 搭配使用 <font color="#4183c4">百度 APP 10.10 以上</font>| |adjust-position | Boolean | true | 键盘弹起时,是否自动上推页面 <font color="#4183c4">百度 APP 10.10 以上</font>| | bindinput | EventHandle | |当键盘输入时,触发 input 事件,event.detail = {value, cursor},处理函数可以直接 return 一个字符串,将替换输入框的内容。| | bindfocus | EventHandle | |输入框聚焦时触发,event.detail = {value: value}| |bindblur |EventHandle | |输入框失去焦点时触发,event.detail = {value: value}| | bindconfirm |EventHandle | |点击完成按钮时触发,event.detail = {value: value}| **type 有效值:** |值|说明 | |---- | ---- | | text |文本输入键盘 | | number |数字输入键盘 | | digit |带小数点的数字键盘 | **confirm-type 有效值:** |值|说明 | |---- | ---- | | send |右下角按钮为 “发送”| |search |右下角按钮为 “搜索” | | next |右下角按钮为 “下一个”| | go |右下角按钮为 “前往” | | done |右下角按钮为 “完成” | <notice>示例: </notice> ```xml <!-- input.swan --> <view class="section"> <input maxlength="20" placeholder="最大输入长度20" /> </view> ``` ### label <div class="notice">解释: </div> 使用 for 属性找到对应的 id(必须写for),当点击时,就会触发对应的控件。 for 优先级高于内部控件,内部有多个控件的时候默认触发第一个控件。 目前可以绑定的控件有:`'<button/>`、 `<checkbox/>`、 `<radio/>`、`<switch/>`。 <div></div> |属性名|类型|说明| |-----|--- |--- | |for|String|绑定控件的 id| ### picker <div class="notice">解释: </div>选择器 <div></div> 从底部弹起的滚动选择器。现支持五种选择器,通过 mode 来区分,分别是时间选择器、日期选择器、普通选择器、多列选择器以及省市区选择器,默认是普通选择器。 <notice>时间选择器:mode = time</notice> |属性名 |类型 |默认值 |说明| |---- | ---- | ---- |---- | | value | String | |表示选中的时间,格式为 "hh:mm"| | start | String | |表示有效时间范围的开始,字符串格式为 "hh:mm"| | end | String | |表示有效时间范围的结束,字符串格式为 "hh:mm"| |bindchange| EventHandle ||value 改变时触发 change 事件,event.detail = {value: value}| | disabled | Boolean | false |是否禁用| <notice>日期选择器:mode = date</notice> |属性名 |类型 |默认值 |说明| |---- | ---- | ---- |---- | | value | String | 当前日期|表示选中的日期,格式为 "YYYY-MM-DD"| | start | String | |表示有效日期范围的开始,字符串格式为 "YYYY-MM-DD"| | end | String | |表示有效日期范围的结束,字符串格式为 "YYYY-MM-DD"| | fields | String | day |有效值 year、 month、 day,表示选择器的粒度| | bindchange | EventHandle | |value 改变时触发 change 事件,event.detail = {value: value}| | disabled | Boolean | false |是否禁用| <notice>普通选择器:mode = selector</notice> |属性名 |类型 |默认值 |说明| |---- | ---- | ---- |---- | | range | Array/Object Array ||mode 为 selector 或 multiSelector 时,range 有效| | range-key | String | |当 range 是一个 Object Array 时,通过 range-key 来指定 Object 中 key 的值作为选择器显示内容| | value | Number | 0 |value 的值表示选择了 range 中的第几个(下标从 0 开始)| | bindchange | EventHandle ||value 改变时触发 change 事件,event.detail = {value: value}| | disabled | Boolean | false |是否禁用| | title | String | | 选择器标题(仅安卓有效)默认值为 "设置" | <notice>多列选择器:mode = multiSelector</notice> |属性名 |类型 |默认值 |说明| |---- | ---- | ---- |---- | | range | 二维 Array/Object Array ||mode 为 selector 或 multiSelector 时,range 有效。二维数组,长度表示多少列,数组的每项表示每列的数据,如[["a","b"], ["c","d"]]| | range-key | String | |当 range 是一个二维 Object Array 时,通过 range-key 来指定 Object 中 key 的值作为选择器显示内容| | value | Array | [] |value 每一项的值表示选择了 range 对应项中的第几个(下标从 0 开始)| | bindcolumnchange | EventHandle ||某一列的值改变时触发 columnchange 事件,event.detail = {column: column, value: value},column 的值表示改变了第几列(下标从0开始),value 的值表示变更值的下标| | bindchange | EventHandle ||value 改变时触发 change 事件,event.detail = {value: value}| | disabled | Boolean | false |是否禁用| | title | String | | 选择器标题(仅安卓有效)默认值为 "设置" | <notice>省市区选择器:mode = region</notice> |属性名 |类型 |默认值 |说明| |---- | ---- | ---- |---- | | value | Array | [] |表示选中的省市区,默认选中每一列的第一个值| | custom-item | String ||可为每一列的顶部添加一个自定义的项| | bindchange | EventHandle ||value 改变时触发 change 事件,event.detail = {value: value}| | disabled | Boolean | false |是否禁用| | title | String | | 选择器标题(仅安卓有效)默认值为 "设置" | <notice>fields 有效值</notice> |值 |说明 | |---- | ---- | |year |选择器粒度为年 | |month |选择器粒度为月份| |day |选择器粒度为天| <notice>示例: </notice> ```xml <view class="section"> <view class="section-title">时间选择器</view> <picker mode="time" value="{{time}}" start="11:11" end="23:11" bindchange="bindTimeChange"> <view class="picker"> 当前选择: {{time}} </view> </picker> </view> <view class="section"> <view class="section-title">单列选择器</view> <picker mode="selector" value="{{index}}" range="{{array}}" bind:change="selectorChange" title="普通选择器"> <view class="picker"> 当前选择: {{array[index]}} </view> </picker> </view> <view class="section"> <view class="section-title">多列选择器</view> <picker mode="multiSelector" bindchange="bindMultiPickerChange" bindcolumnchange="bindMultiPickerColumnChange" value="{{multiIndex}}" range="{{multiArray}}" title="多列选择器"> <view class="picker"> 当前选择:{{multiArray[0][multiIndex[0]]}},{{multiArray[1][multiIndex[1]]}},{{multiArray[2][multiIndex[2]]}} </view> </picker> </view> <view class="section"> <view class="section-title">地区选择器</view> <picker mode="region" bindchange="regionChange" custom-item="{{customItem}}" title="省市区选择器"> <view class="picker"> 当前选择:{{regionData[0]}} {{regionData[1]}} {{regionData[2]}} </view> </picker> </view> ``` ```javascript Page({ data: { time: '12:12', index: 1, array: ['科目一', '科目二', '科目三', '科目四'], multiIndex: [0, 0, 0], multiArray: [['无脊柱动物', '脊柱动物'], ['扁性动物', '线形动物', '环节动物', '软体动物', '节肢动物'], ['猪肉绦虫', '吸血虫']], regionData: ['全部', '全部', '全部'], customItem: '全部' }, bindTimeChange: function(e) { console.log('picker-time changed,值为', e.detail.value) this.setData({ time: e.detail.value }) }, selectorChange: function (e) { console.log('picker-selector changed,值为', e.detail.value) this.setData( 'index', e.detail.value ); }, bindMultiPickerChange: function (e) { console.log('picker-multiSelector changed,值为', e.detail.value) this.setData( 'multiIndex', e.detail.value ); }, bindMultiPickerColumnChange: function (e) { console.log('修改的列为', e.detail.column, ',值为', e.detail.value); var data = { multiArray: this.getData('multiArray'), multiIndex: this.getData('multiIndex') }; data.multiIndex[e.detail.column] = e.detail.value; switch (e.detail.column) { case 0: switch (data.multiIndex[0]) { case 0: data.multiArray[1] = ['扁性动物', '线形动物', '环节动物', '软体动物', '节肢动物']; data.multiArray[2] = ['猪肉绦虫', '吸血虫']; break; case 1: data.multiArray[1] = ['鱼', '两栖动物', '爬行动物']; data.multiArray[2] = ['鲫鱼', '带鱼']; break; } data.multiIndex[1] = 0; data.multiIndex[2] = 0; break; case 1: switch (data.multiIndex[0]) { case 0: switch (data.multiIndex[1]) { case 0: data.multiArray[2] = ['猪肉绦虫', '吸血虫']; break; case 1: data.multiArray[2] = ['蛔虫']; break; case 2: data.multiArray[2] = ['蚂蚁', '蚂蟥']; break; case 3: data.multiArray[2] = ['河蚌', '蜗牛', '蛞蝓']; break; case 4: data.multiArray[2] = ['昆虫', '甲壳动物', '蛛形动物', '多足动物']; break; } break; case 1: switch (data.multiIndex[1]) { case 0: data.multiArray[2] = ['鲫鱼', '带鱼']; break; case 1: data.multiArray[2] = ['青蛙', '娃娃鱼']; break; case 2: data.multiArray[2] = ['蜥蜴', '龟', '壁虎']; break; } break; } data.multiIndex[2] = 0; break; } this.setData('multiArray', data.multiArray); this.setData('multiIndex', data.multiIndex); }, regionChange: function (e) { this.setData( 'regionData', e.detail.value ); console.log('picker-time changed,值为', e.detail.value) } }); ``` ### picker-view <div class="notice">解释: </div>嵌入页面的滚动选择器 <div></div> |属性名 |类型 |说明| |---- | ---- |---- | | value |NumberArray |数组中的数字依次表示 picker-view 内的 picker-view-colume 选择的第几项(下标从 0 开始),数字大于 picker-view-column 可选项长度时,选择最后一项。| |indicator-style | String |设置选择器中间选中框的样式| |indicator-class | String |设置选择器中间选中框的类名| |mask-style | String |设置蒙层的样式 | |mask-class | String |设置蒙层的类名| | bindchange | EventHandle |当滚动选择,value 改变时触发 change 事件,event.detail = {value: value};value 为数组,表示 picker-view 内的 picker-view-column 当前选择的是第几项(下标从 0 开始)| <div class="notice">Tips: </div> 其中只可放置`<picker-view-column/>`组件,其他节点不会显示。 <notice>picker-view-column</notice> <div class="notice">解释: </div>仅可放置于`<picker-view />`中,其孩子节点的高度会自动设置成与 picker-view 的选中框的高度一致。<div></div> ### radio-group <div class="notice">解释: </div>单项选择 <div></div> <notice>内部由多个 &lt;radio/&gt; 组成</notice> | 属性名 | 类型 | 默认值 | 说明 | | ---- | ---- | ---- | ---- | | bindchange | EventHandle | &nbsp; | &lt;radio-group/&gt; 中的选中项发生变化时触发 change 事件,event.detail = {value: 选中项 radio 的 value} | ### radio <div class="notice">解释: </div>单选项目 <div></div> | 属性名 | 类型 | 默认值 | 说明 | | ---- | ---- | ---- | ---- | | value | String | &nbsp; | &lt;radio/&gt; 标识。当该 &lt;radio/&gt; 选中时,&lt;radio-group/&gt; 的 change 事件会携带 &lt;radio/&gt; 的 value | | checked | Boolean | false | 当前是否选中 | | disabled | Boolean | false | 是否禁用 | | color | Color | &nbsp; | radio 的颜色,同 CSS 的 color | <notice>示例: </notice> ```xml <radio-group bindchange="radioChange"> <label s-for="{{item in items}}"> <radio value="{{item.name}}" checked="{{item.checked}}" disabled="{{item.disabled}}" color="#ff0000" /> {{item.value}} </label> </radio-group> ``` ```javascript Page({ data: { items: [ {name: 'USA', value: '美国'}, {name: 'CHN', value: '中国', checked: true}, {name: 'BRA', value: '巴西'}, {name: 'JPN', value: '日本'}, {name: 'ENG', value: '英国', disabled: true}, {name: 'TUR', value: '法国'} ] }, radioChange: function(e) { console.log('radio发生change事件,携带value值为:', e.detail.value); } }); ``` ### slider **解释:**滑动选择器 **属性说明:** |属性名 |类型 |默认值 |说明| |---- | ---- | ---- |---- | | min | Number | 0 |最小值| | max | Number |100 |最大值| | step |Number |1 |步长,取值必须大于 0,并且可被 (max - min) 整除| | disabled | Boolean |false |是否禁用| | value | Number |0 |当前取值| | backgroundColor | Color |#cccccc |背景条的颜色| | block-size | Number |24 |滑块的大小,取值范围为 12 - 28| | block-color | Color |#ffffff |滑块的颜色| | activeColor | Color |#3c76ff |已选择的颜色| |show-value |Boolean |false |是否显示当前 value| |bindchange | EventHandle ||完成一次拖动后触发的事件,event.detail = {value: value}| |bindchanging |EventHandle | |拖动过程中触发的事件,event.detail = {value: value}| **示例:** ```xml <!--- slider.swan ---> <p>default</p> <slider></slider> <br/> <slider value="50"></slider> <br/> <p>disabled</p> <slider disabled></slider> <slider disabled value="50" step="20" showValue></slider> <br/> <p>swan-slider-demo</p> <slider showValue></slider> <br/> <slider showValue max="2000" min="200" step="50"></slider> <br/> <p>value=100 小于 min: 200</p> <slider showValue max="2000" min="200" step="50" value="100"></slider> <p>value=3000 大于于 max: 2000</p> <slider showValue max="2000" min="200" step="50" value="3000"></slider> <br/> <p>step: 20</p> <slider step="20" showValue></slider> <br/> <slider step="20" showValue value="20"></slider> <p>color</p> <slider step="20" showValue value="20" backgroundColor="red"></slider> <slider step="20" showValue value="20" backgroundColor="red" activeColor="green"></slider> <p>event</p> <slider bind:change="sliderChange" bind:changing="sliderChanging" showValue></slider> ``` ```javascript // slider.js Page({ data: { zztest: 'hzz780' }, sliderChange: e ={ console.log('sliderChange', e, e.detail); }, sliderChanging: e ={ console.log('sliderChanging', e, e.detail); } }); ``` ### switch <div class="notice">解释: </div>开关选择器 <div></div> |属性名 |类型 |默认值 |说明| |---- | ---- | ---- |---- | |checked| Boolean| false| 是否选中| |type| String| switch| 样式,有效值:switch,checkbox| |color| Color| \#09bb07| switch 的颜色,同 CSS 的 color| |bindchange | EventHandle ||checked 改变时触发 change 事件,event.detail={ value:checked}| <notice>示例: </notice> ```xml <!-- swith.swan --> <form bind:submit="formSubmit"> <switch name="switch1" type="checkbox" checked="false"></switch> <switch name="switch2" color="red"></switch> <switch name="switch3" checked></switch> <switch name="switch4" checked="true"></switch> <switch name="switch5" bind:change="changeEvent"></switch> <button formType="submit">提交</button> <button formType="reset">重置</button> </form> ``` ```javascript // switch.js changeEvent: e ={ console.log('change', e); }, formSubmit: e ={ console.log('submit', e); } ``` <div class="notice">Tips: </div> switch 类型切换时在 iOS 自带振动反馈,可在系统设置 -声音与触感 -系统触感反馈中关闭。 <div></div> ### textarea 多行输入框。 |属性名|类型|默认值|说明| |----|----|----|----|----| |value|String||输入框的内容| |placeholder|String||输入框为空时占位符| |placeholder-style|String||指定 placeholder 的样式| |placeholder-class|String|textarea-placeholder|指定 placeholder 的样式类| |disabled|Boolean|false|是否禁用| |maxlength|Number|140|最大输入长度,设置为 -1 的时候不限制最大长度| |auto-height|Boolean|false|是否自动增高,设置auto-height时,style.height不生效| |bindfocus|EventHandle||输入框聚焦时触发,event.detail = { value, height },height| |bindblur|EventHandle||输入框失去焦点时触发,event.detail = {value, cursor}| |bindlinechange|EventHandle||输入框行数变化时调用,event.detail = {height: 0, heightRpx: 0, lineCount: 0}| |bindinput|EventHandle||当键盘输入时,触发 input 事件,event.detail = {value, cursor}, bindinput 处理函数的返回值并不会反映到 textarea 上| |bindconfirm|EventHandle||点击完成时, 触发 confirm 事件,event.detail = {value: value}| |cursor|Number|-1|指定focus时的光标位置 <font color="#4183c4">10.8.5 以上</font>| |focus|Boolean|false|获取焦点 <font color="#4183c4">10.8.5 以上</font>| |fixed|Boolean|false|如果 textarea 是在一个 position:fixed 的区域,需要显示指定属性 fixed 为 true <font color="#4183c4">10.8.5 以上</font>| |cursor-spacing|Number|0|指定光标与键盘的距离,单位 px 。取 textarea 距离底部的距离和 cursor-spacing 指定的距离的最小值作为光标与键盘的距离 <font color="#4183c4">10.8.5 以上</font>| |show-confirm-bar|Boolean|true|是否显示键盘上方带有”完成“按钮那一栏(仅ios支持) <font color="#4183c4">10.8.5 以上</font>| |selection-start|Number|-1|光标起始位置,自动聚集时有效,需与selection-end搭配使用 <font color="#4183c4">10.8.5 以上</font>| |selection-end|Number|-1|光标结束位置,自动聚集时有效,需与selection-start搭配使用 <font color="#4183c4">10.8.5 以上</font>| |adjust-position|Boolean|true|键盘弹起时,是否自动上推页面 <font color="#4183c4">10.8.5 以上</font>| <notice>示例代码:</notice> ```html <!--textarea.swan--> <view class="section"> <textarea placeholder="自动变高" auto-height bindinput="bindInput" bindfocus="bindFocus" bindblur="bindBlur" bindlinechange="bindLinechange" /> </view> <view class="section"> <textarea placeholder="placeholder颜色是红色的" placeholder-style="color:red;" /> </view> ``` ```javascript //textarea.js Page({ data: { height: 20, focus: false }, bindFocus(e) { console.log('focus - e:', e); swan.showToast({ 'title': `focus - ${e.detail.value}` }); }, bindInput(e) { console.log('input - e:', e); swan.showToast({ 'title': `input - ${e.detail.value}` }); }, bindLinechange(e) { console.log('linechange - e:', e); swan.showToast({ 'title': `linechange - ${e.detail.value}` }); }, bindBlur(e) { console.log('blur - e:', e); swan.showToast({ 'title': `blur - ${e.detail.value}` }); } }); ```