uni-app 某些机型原生按钮未选择类型无法点击和replaceAll方法无法使用
uni-app 某些机型原生按钮未选择类型无法点击和replaceAll方法无法使用
示例代码:
问题写法:<button v-if="messageItem.replyRequired" class="speak-bottom_button" @click="comfim(messageItem)">{{messageItem.replied?"回复":"回复"}}</button>
解决写法:加个类型即可
问题写法:this.stid = uuid.replaceAll('-', '')
解决写法:this.stid = uuid.replace('-', '')
for (let n = 0; n < uuid.length; n++) {
this.stid = this.stid.replace('-', '')
}
```
## 操作步骤:
拿台问题机型试试uniapp发行微信小程序。一定是有这个问题的,五百个用户测试出现三四个例子,现在已经用解决写法解决了。但是出现这种问题很离谱。
## 预期结果:
部分用户无法点击按钮,部分用户点击按钮后无法执行方法(已解决)
## 实际结果:
部分用户无法点击按钮,部分用户点击按钮后无法执行方法(已解决)
## bug描述:
机型如红米note5,原生按钮未选择类型无法点击
华为P30,原生按钮未选择类型无法点击和replaceAll方法无法使用
```
| 项目 | 信息 |
|--------------|----------------|
| 产品分类 | uniapp/小程序/微信 |
| PC开发环境操作系统 | Windows |
| PC开发环境操作系统版本号 | Windows 10 |
| HBuilderX类型 | 正式 |
| HBuilderX版本号 | 3.2.16 |
| 第三方开发者工具版本号 | 1.05.2108150 |
| 基础库版本号 | 2.20.0 |
| 项目创建方式 | HBuilderX |
更多关于uni-app 某些机型原生按钮未选择类型无法点击和replaceAll方法无法使用的实战教程也可以访问 https://www.itying.com/category-93-b0.html
因为我是接手这个功能,上一代的样式写法没有细看,初期排查甚至以为是样式重叠问题,使用flex布局重构页面后发现还是有这个问题。用户体验很差,还是用户亲自过来提供机型测试才一个一个问题解决。希望官方尽快解决吧,太离谱了先是type没设置类型用不了按钮,然后是replaceAll方法无法使用,前前后后花了一周时间。当然这些问题用其他方式解决了,但这个问题还是需要解决一下,对其他开发者也很不友好的。
更多关于uni-app 某些机型原生按钮未选择类型无法点击和replaceAll方法无法使用的实战教程也可以访问 https://www.itying.com/category-93-b0.html
其实replace(/-/g, ‘/’)也行。但replaceAll的问题甚至可能影响不少插件的功能也出现问题。
js 里面没有replaceAll,需要使用replace(/-/g,’’)…你也可以全局注册一个replaceAll…String.prototype.replaceAll = String.prototype.replaceAll || function(a1,a2){
return this.replace(new RegExp(a1,‘g’),a2)
}
其他机型没问题,就一台华为P30出了js里面没有replaceAll这个方法。这个解决办法有考虑到,不过用的是id怕后端修改就改成循环替换
回复 1***@qq.com: 不过现在浏览器里面都有replaceAll了…以前都没有的呢
针对你提到的两个问题,这里给出具体的技术分析和解决方案:
1. 原生按钮未选择类型无法点击
在 uni-app 中,<button> 组件默认类型为 default,但某些低版本微信小程序基础库或特定机型(如红米 Note5、华为 P30)对未显式声明类型的按钮可能存在兼容性问题,导致点击事件无法触发。
解决方案:
- 始终为
<button>显式设置type属性,例如type="primary"、type="default"或type="warn"。 - 修改后的代码示例:
<button type="default" v-if="messageItem.replyRequired" [@click](/user/click)="confirm(messageItem)"> {{ messageItem.replied ? "已回复" : "回复" }} </button>
2. replaceAll 方法无法使用
replaceAll 是 ES2021 标准中新增的字符串方法,低版本 JavaScript 引擎(如部分安卓旧机型的 WebView 或小程序基础库)可能不支持该方法,导致报错或无法执行。
解决方案:
- 使用兼容性更好的
replace配合正则表达式全局替换:this.stid = uuid.replace(/-/g, ''); - 或使用
split+join替代:this.stid = uuid.split('-').join('');

