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

6 回复

因为我是接手这个功能,上一代的样式写法没有细看,初期排查甚至以为是样式重叠问题,使用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('');
回到顶部