# button

> 基础库 1.0.0 开始支持，低版本需做[兼容处理](1003706)。

> __微信 Windows 版__：支持
> 
> __微信 Mac 版__：支持
> 
> __微信 鸿蒙 OS 版__：支持

> 相关文档: [聊天工具模式](/miniprogram/dev/framework/open-ability/chatTool.md)

渲染框架支持情况：Skyline （使用最新 [Nightly](/miniprogram/dev/devtools/nightly.html) 工具调试）、WebView

## 功能描述

按钮。

## 通用属性


```json
[
  {
    "属性": "size",
    "类型": "string",
    "默认值": "default",
    "必填": "否",
    "说明": "按钮的大小",
    "最低版本": "[1.0.0](1003706)",
    "子项": [
      {
        "合法值": "default",
        "说明": "默认大小"
      },
      {
        "合法值": "mini",
        "说明": "小尺寸"
      }
    ]
  },
  {
    "属性": "type",
    "类型": "string",
    "默认值": "default",
    "必填": "否",
    "说明": "按钮的样式类型",
    "最低版本": "[1.0.0](1003706)",
    "子项": [
      {
        "合法值": "primary",
        "说明": "绿色"
      },
      {
        "合法值": "default",
        "说明": "白色"
      },
      {
        "合法值": "warn",
        "说明": "红色"
      }
    ]
  },
  {
    "属性": "plain",
    "类型": "boolean",
    "默认值": "false",
    "必填": "否",
    "说明": "按钮是否镂空，背景色透明",
    "最低版本": "[1.0.0](1003706)"
  },
  {
    "属性": "disabled",
    "类型": "boolean",
    "默认值": "false",
    "必填": "否",
    "说明": "是否禁用",
    "最低版本": "[1.0.0](1003706)"
  },
  {
    "属性": "loading",
    "类型": "boolean",
    "默认值": "false",
    "必填": "否",
    "说明": "名称前是否带 loading 图标",
    "最低版本": "[1.0.0](1003706)"
  },
  {
    "属性": "form-type",
    "类型": "string",
    "默认值": "",
    "必填": "否",
    "说明": "用于 [form](/miniprogram/dev/component/form) 组件，点击分别会触发 [form](/miniprogram/dev/component/form) 组件的 submit/reset 事件",
    "最低版本": "[1.0.0](1003706)",
    "子项": [
      {
        "合法值": "submit",
        "说明": "提交表单",
        "最低版本": ""
      },
      {
        "合法值": "reset",
        "说明": "重置表单",
        "最低版本": ""
      },
      {
        "合法值": "submitToGroup",
        "说明": "转发文本到聊天",
        "最低版本": "[3.7.8](1003706)"
      }
    ]
  },
  {
    "属性": "open-type",
    "类型": "string",
    "默认值": "",
    "必填": "否",
    "说明": "微信开放能力",
    "最低版本": "[1.1.0](1003706)",
    "子项": [
      {
        "合法值": "contact",
        "说明": "打开客服会话，如果用户在会话中点击消息卡片后返回小程序，可以从 bind:contact 回调中获得具体信息，[具体说明](/miniprogram/dev/framework/open-ability/customer-message/customer-message.md)。鸿蒙 OS 暂不支持",
        "最低版本": "[1.1.0](1003706)"
      },
      {
        "合法值": "liveActivity",
        "说明": "通过前端获取[新的一次性订阅消息下发机制](/miniprogram/dev/framework/open-ability/subscribe-message-2.md)使用的 code",
        "最低版本": "[2.26.2](1003706)"
      },
      {
        "合法值": "share",
        "说明": "触发用户转发，使用前建议先阅读[使用指引](/miniprogram/dev/framework/open-ability/share.md#使用指引)",
        "最低版本": "[1.2.0](1003706)"
      },
      {
        "合法值": "getPhoneNumber",
        "说明": "手机号快速验证，向用户申请，并在用户同意后，快速填写和验证手机，[具体说明](/miniprogram/dev/framework/open-ability/getPhoneNumber.md) （*小程序插件中不能使用*）",
        "最低版本": "[1.2.0](1003706)"
      },
      {
        "合法值": "getRealtimePhoneNumber",
        "说明": "手机号实时验证，向用户申请，并在用户同意后，快速填写和实时验证手机号。[具体说明](/miniprogram/dev/framework/open-ability/getRealtimePhoneNumber.md) （*小程序插件中不能使用*）",
        "最低版本": "[2.24.4](1003706)"
      },
      {
        "合法值": "getUserInfo",
        "说明": "获取用户信息，可以从bind:getuserinfo回调中获取到用户信息 （*小程序插件中不能使用*）",
        "最低版本": "[1.3.0](1003706)"
      },
      {
        "合法值": "launchApp",
        "说明": "打开APP，可以通过app-parameter属性设定向APP传的参数[具体说明](/miniprogram/dev/framework/open-ability/launchApp.md)",
        "最低版本": "[1.9.5](1003706)"
      },
      {
        "合法值": "openSetting",
        "说明": "打开授权设置页",
        "最低版本": "[2.0.7](1003706)"
      },
      {
        "合法值": "feedback",
        "说明": "打开“意见反馈”页面，用户可提交反馈内容并上传[日志](/miniprogram/dev/api/base/debug/wx.getLogManager.md)，开发者可以登录[小程序管理后台](https://mp.weixin.qq.com/)后进入左侧菜单“客服反馈”页面获取到反馈内容",
        "最低版本": "[2.1.0](1003706)"
      },
      {
        "合法值": "chooseAvatar",
        "说明": "获取用户头像，可以从bind:chooseavatar回调中获取到头像信息",
        "最低版本": "[2.21.2](1003706)"
      },
      {
        "合法值": "agreePrivacyAuthorization",
        "说明": "用户同意隐私协议按钮。用户点击一次此按钮后，所有已声明过的隐私接口可以正常调用。可通过 bind:agreeprivacyauthorization 监听用户同意隐私协议事件。隐私合规开发指南详情可见[《小程序隐私协议开发指南》](/miniprogram/dev/framework/user-privacy/PrivacyAuthorize.md)",
        "最低版本": "[2.32.3](1003706)"
      }
    ]
  },
  {
    "属性": "hover-class",
    "类型": "string",
    "默认值": "button-hover",
    "必填": "否",
    "说明": "指定按钮按下去的样式类。当 \u0000INLINECODE_0\u0000 时，没有点击态效果",
    "最低版本": "[1.0.0](1003706)"
  },
  {
    "属性": "hover-stop-propagation",
    "类型": "boolean",
    "默认值": "false",
    "必填": "否",
    "说明": "指定是否阻止本节点的祖先节点出现点击态",
    "最低版本": "[1.5.0](1003706)"
  },
  {
    "属性": "hover-start-time",
    "类型": "number",
    "默认值": "20",
    "必填": "否",
    "说明": "按住后多久出现点击态，单位毫秒",
    "最低版本": "[1.0.0](1003706)"
  },
  {
    "属性": "hover-stay-time",
    "类型": "number",
    "默认值": "70",
    "必填": "否",
    "说明": "手指松开后点击态保留时间，单位毫秒",
    "最低版本": "[1.0.0](1003706)"
  },
  {
    "属性": "lang",
    "类型": "string",
    "默认值": "en",
    "必填": "否",
    "说明": "指定返回用户信息的语言，zh_CN 简体中文，zh_TW 繁体中文，en 英文。",
    "最低版本": "[1.3.0](1003706)",
    "子项": [
      {
        "合法值": "en",
        "说明": "英文"
      },
      {
        "合法值": "zh_CN",
        "说明": "简体中文"
      },
      {
        "合法值": "zh_TW",
        "说明": "繁体中文"
      }
    ]
  },
  {
    "属性": "session-from",
    "类型": "string",
    "默认值": "",
    "必填": "否",
    "说明": "会话来源，open-type=\"contact\"时有效，长度不超过 1024 个字符",
    "最低版本": "[1.4.0](1003706)"
  },
  {
    "属性": "send-message-title",
    "类型": "string",
    "默认值": "当前标题",
    "必填": "否",
    "说明": "会话内消息卡片标题，open-type=\"contact\"时有效",
    "最低版本": "[1.5.0](1003706)"
  },
  {
    "属性": "send-message-path",
    "类型": "string",
    "默认值": "当前分享路径",
    "必填": "否",
    "说明": "会话内消息卡片点击跳转小程序路径，open-type=\"contact\"时有效",
    "最低版本": "[1.5.0](1003706)"
  },
  {
    "属性": "send-message-img",
    "类型": "string",
    "默认值": "截图",
    "必填": "否",
    "说明": "会话内消息卡片图片，open-type=\"contact\"时有效",
    "最低版本": "[1.5.0](1003706)"
  },
  {
    "属性": "app-parameter",
    "类型": "string",
    "默认值": "",
    "必填": "否",
    "说明": "打开 APP 时，向 APP 传递的参数，open-type=launchApp时有效",
    "最低版本": "[1.9.5](1003706)"
  },
  {
    "属性": "show-message-card",
    "类型": "boolean",
    "默认值": "false",
    "必填": "否",
    "说明": "是否显示会话内消息卡片，设置此参数为 true，用户进入客服会话会在右下角显示\"可能要发送的小程序\"提示，用户点击后可以快速发送小程序消息，open-type=\"contact\"时有效",
    "最低版本": "[1.5.0](1003706)"
  },
  {
    "属性": "phone-number-no-quota-toast",
    "类型": "boolean",
    "默认值": "true",
    "必填": "否",
    "说明": "当手机号快速验证或手机号实时验证额度用尽时，是否对用户展示“申请获取你的手机号，但该功能使用次数已达当前小程序上限，暂时无法使用”的提示，默认展示，open-type=\"getPhoneNumber\" 或 open-type=\"getRealtimePhoneNumber\" 时有效",
    "最低版本": "[3.0.1](1003706)"
  },
  {
    "属性": "need-show-entrance",
    "类型": "boolean",
    "默认值": "true",
    "必填": "否",
    "说明": "转发的文本消息是否要带小程序入口",
    "最低版本": "[3.7.8](1003706)"
  },
  {
    "属性": "entrance-path",
    "类型": "string",
    "默认值": "''",
    "必填": "否",
    "说明": "从消息小程序入口打开小程序的路径，默认为聊天工具启动路径",
    "最低版本": "[3.7.8](1003706)"
  },
  {
    "属性": "bind:getuserinfo",
    "类型": "eventhandle",
    "默认值": "",
    "必填": "否",
    "说明": "用户点击该按钮时，会返回获取到的用户信息，回调的detail数据与[wx.getUserInfo](/miniprogram/dev/api/open-api/user-info/wx.getUserInfo.md)返回的一致，open-type=\"getUserInfo\"时有效",
    "最低版本": "[1.3.0](1003706)"
  },
  {
    "属性": "bind:contact",
    "类型": "eventhandle",
    "默认值": "",
    "必填": "否",
    "说明": "客服消息回调，open-type=\"contact\"时有效。",
    "最低版本": "[1.5.0](1003706)"
  },
  {
    "属性": "createliveactivity",
    "类型": "eventhandle",
    "默认值": "",
    "必填": "否",
    "说明": "[新的一次性订阅消息下发机制](/miniprogram/dev/framework/open-ability/subscribe-message-2.md)回调，open-type=liveActivity时有效",
    "最低版本": "[2.26.2](1003706)"
  },
  {
    "属性": "bind:getphonenumber",
    "类型": "eventhandle",
    "默认值": "",
    "必填": "否",
    "说明": "手机号快速验证回调，open-type=getPhoneNumber时有效。Tips：在触发 bind:getphonenumber 回调后应立即隐藏手机号按钮组件，或置为 disabled 状态，避免用户重复授权手机号产生额外费用。",
    "最低版本": "[1.2.0](1003706)"
  },
  {
    "属性": "bind:getrealtimephonenumber",
    "类型": "eventhandle",
    "默认值": "",
    "必填": "否",
    "说明": "手机号实时验证回调，open-type=getRealtimePhoneNumber 时有效。Tips：在触发 bind:getrealtimephonenumber 回调后应立即隐藏手机号按钮组件，或置为 disabled 状态，避免用户重复授权手机号产生额外费用。",
    "最低版本": "[2.24.4](1003706)"
  },
  {
    "属性": "bind:error",
    "类型": "eventhandle",
    "默认值": "",
    "必填": "否",
    "说明": "当使用开放能力时，发生错误的回调，open-type=launchApp时有效",
    "最低版本": "[1.9.5](1003706)"
  },
  {
    "属性": "bind:opensetting",
    "类型": "eventhandle",
    "默认值": "",
    "必填": "否",
    "说明": "在打开授权设置页后回调，open-type=openSetting时有效",
    "最低版本": "[2.0.7](1003706)"
  },
  {
    "属性": "bind:launchapp",
    "类型": "eventhandle",
    "默认值": "",
    "必填": "否",
    "说明": "打开 APP 成功的回调，open-type=launchApp时有效",
    "最低版本": "[2.4.4](1003706)"
  },
  {
    "属性": "bind:chooseavatar",
    "类型": "eventhandle",
    "默认值": "",
    "必填": "否",
    "说明": "获取用户头像回调，open-type=chooseAvatar时有效",
    "最低版本": "[2.21.2](1003706)"
  },
  {
    "属性": "bind:agreeprivacyauthorization",
    "类型": "eventhandle",
    "默认值": "",
    "必填": "否",
    "说明": "用户同意隐私协议事件回调，open-type=agreePrivacyAuthorization时有效 （Tips: 如果使用 onNeedPrivacyAuthorization 接口，需要在 bind:agreeprivacyauthorization 触发后再调用 \u0000INLINECODE_1\u0000）",
    "最低版本": "[2.32.3](1003706)"
  }
]
```

## Bug & Tip

1. `tip`: `button-hover` 默认为`{background-color: rgba(0, 0, 0, 0.1); opacity: 0.7;}`
1. `tip`: `bind:getphonenumber` 从1.2.0 开始支持，但是在1.5.3以下版本中无法使用[wx.canIUse](/miniprogram/dev/api/base/wx.canIUse.md)进行检测，建议使用基础库版本进行判断。
1. `tip`: 在`bind:getphonenumber` 等返回加密信息的回调中调用 [wx.login](/miniprogram/dev/api/open-api/login/wx.login.md) 登录，可能会刷新登录态。此时服务器使用 code 换取的 sessionKey 不是加密时使用的 sessionKey，导致解密失败。建议开发者提前进行 `login`；或者在回调中先使用 `checkSession` 进行登录态检查，避免 `login` 刷新登录态。
1. `tip`: 从 2.21.2 起，对`getPhoneNumber`接口进行了安全升级，`bind:getphonenumber` 返回的信息中增加`code`参数，`code`是一个动态的令牌，开发者拿到`code`后需调用微信后台接口换取手机号。详情[新版接口使用指南](/miniprogram/dev/framework/open-ability/getPhoneNumber.md)
1. `tip`: 从 2.1.0 起，button 可作为原生组件的子节点嵌入，以便在原生组件上使用 `open-type` 的能力。
1. `tip`: 目前设置了 `form-type` 的 `button` 只会对当前组件中的 `form` 有效。因而，将 `button` 封装在自定义组件中，而 `form` 在自定义组件外，将会使这个 `button` 的 `form-type` 失效。

## 发送文本到群示例代码

需结合 [form](/miniprogram/dev/component/form) 和 [textarea](/miniprogram/dev/component/textarea) 组件使用。
[button](/miniprogram/dev/component/button) 需要设置 `form-type="submitToGroup"`，此时点击按钮将会发送 [textarea](/miniprogram/dev/component/textarea) 的内容到聊天。

```html
<form bind:submitToGroup="onSubmitToGroup">
	<textarea value="{{shareText}}" />
	<button 
    form-type="submitToGroup" 
    need-show-entrance="{{true}}" 
    entrance-path=""
	></button>
</form>
```

## 示例代码

[在开发者工具中预览效果](https://developers.weixin.qq.com/s/3pZlJRmr7mJS)
