uni-app input设置disabled为true在部分新系统(小米澎湃、OPPO ColorOS)不能触发click事件
uni-app input设置disabled为true在部分新系统(小米澎湃、OPPO ColorOS)不能触发click事件
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | Windows 10 | HBuilderX |
专业版 22H2 |
示例代码:
<input
type="text"
placeholder="请选择"
value="form.type"
disabled="true"
@click="selectType()"
/>
操作步骤:
<input
type="text"
placeholder="请选择"
value="form.type"
disabled="true"
@click="selectType()"
/>
预期结果:
- 点击input控件,触发
selectType
方法
实际结果:
- 点击input控件,没有触发
selectType
方法,无任何信息打印
bug描述:
input
设置disabled
为true
在部分新系统(小米澎湃、OPPO ColorOS)不能触发click
事件。- 根本原因:
- 由于升级系统导致手机的Chrome内核版本也跟着升级到116及以上版本,导致设置
disabled
的input
无法触发并冒泡click
事件。 - 参考链接:Chromium Bug Tracker
- 由于升级系统导致手机的Chrome内核版本也跟着升级到116及以上版本,导致设置
之前遇到过类似的 是在google浏览器中 input设置disabled后无法点击
我是用这个属性解决的 你可以参考一下 试试手机端能不嗯生效
<input style="pointer-events: none"></input>
NB!
全局CSS:
// 兼容Chrome内核116及以上版本中配置disabled的input组件无法触发并冒泡click事件
.uni-input-input:disabled {
pointer-events: none;
}
浏览器原生 input 元素 disabled 后也不支持触发 click 事件,可使用 touch 相关事件替代,touch 相关事件可以触发
在 uni-app
中,如果你发现 input
元素设置了 disabled
为 true
后,在某些新系统(如小米澎湃、OPPO ColorOS)上无法触发 click
事件,这可能是由于这些系统对 disabled
元素的处理方式不同。
解决方案
-
使用
readonly
替代disabled
如果
input
不需要用户输入,但需要点击事件,可以使用readonly
属性替代disabled
。readonly
属性会阻止用户输入,但不会阻止点击事件。<input type="text" readonly [@click](/user/click)="handleClick" />
-
使用
div
或其他元素包裹input
如果必须使用
disabled
,可以将input
包裹在一个div
或其他元素中,并在包裹元素上监听click
事件。<div [@click](/user/click)="handleClick"> <input type="text" disabled /> </div>
-
动态设置
disabled
状态如果你需要在某些条件下禁用
input
,但同时保留点击事件,可以动态设置disabled
状态,并在click
事件中根据条件进行处理。<input type="text" :disabled="isDisabled" [@click](/user/click)="handleClick" />
methods: { handleClick() { if (!this.isDisabled) { // 处理点击事件 } } }
-
使用 CSS 模拟
disabled
状态你也可以使用 CSS 来模拟
disabled
状态,这样input
仍然可以触发点击事件。<input type="text" :class="{ 'disabled-style': isDisabled }" [@click](/user/click)="handleClick" />
.disabled-style { opacity: 0.5; pointer-events: none; }
methods: { handleClick() { if (!this.isDisabled) { // 处理点击事件 } } }