uni-app 安卓微信小程序 input 组件失去焦点会触发@input事件(微信开发工具和IOS真机正常)
uni-app 安卓微信小程序 input 组件失去焦点会触发@input事件(微信开发工具和IOS真机正常)
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | Windows 10 企业版 | HBuilderX |
产品分类:uniapp/小程序/微信
PC开发环境操作系统:Windows
HBuilderX类型:正式
HBuilderX版本号:3.1.2
第三方开发者工具版本号:1.03
基础库版本号:2.14.4
项目创建方式:HBuilderX
示例代码:
// 子组件 searchInput.vue
<template>
<input
class="search-input__input"
:value="value"
type="text"
:placeholder="placeholder"
placeholder-class="search-input__placeholder"
[@input](/user/input)="onInputEvent"
@confirm="onConfirm"
@focus="onFocus"
:disabled="disabled"
:maxlength="maxlength"
confirm-type="search"
/>
</template>
<script>
export default {
props: {
value: {
type: [String],
default: ''
},
disabled: {
type: [Boolean, String],
default: false
},
maxlength: {
type: [Number],
default: 140
},
placeholder: {
type: [String],
default: '请输入'
}
},
methods: {
onClick() {
this.$emit('onClick');
},
// 获取焦点
onFocus() {
this.$emit('onFocus');
},
// 输入赋值
onInputEvent(e) {
this.$emit('update:value', e.detail.value);
},
// 清空输入框
onClear() {
this.$emit('onClear');
},
// 点击确认
onConfirm(e) {
this.$emit('onConfirm', e.detail.value);
}
}
}
</script>
// 页面引入子组件
<template>
<search-input
:placeholder="placeholder"
:value.sync="inputVal"
@onConfirm="startSearch"
@onClear="onClear"
/>
</template>
<script>
import SearchInput from '@/wxcomponents/searchInput';
export default {
components: {
SearchInput
},
methods:{
onInputEvent(val) {
console.log(val, 'onInput');
this.inputVal = val;
},
}
}
</script>
`
更多关于uni-app 安卓微信小程序 input 组件失去焦点会触发@input事件(微信开发工具和IOS真机正常)的实战教程也可以访问 https://www.itying.com/category-93-b0.html
直接使用微信小程序(不使用 uni-app )测试,问题是否存在,如果仍然存在反馈给微信小程序社区
更多关于uni-app 安卓微信小程序 input 组件失去焦点会触发@input事件(微信开发工具和IOS真机正常)的实战教程也可以访问 https://www.itying.com/category-93-b0.html
使用原生不存在这个问题的
https://ask.dcloud.net.cn/question/71442 类似这种情况,估计是同一个原因
回复 a***@sina.cn: 应该不是同一个
回复 DCloud_UNI_GSQ: 你确认不使用 uni-app 就正常吗?
这是一个在uni-app开发中遇到的安卓微信小程序input组件行为差异问题。根据描述,在安卓真机上input失去焦点时会额外触发@input事件,而微信开发工具和iOS真机表现正常。
问题分析:
- 这是微信小程序底层在安卓平台的特异行为
- 主要差异出现在焦点切换时的处理逻辑
解决方案建议:
- 使用防抖处理:
let timer = null
onInputEvent(e) {
clearTimeout(timer)
timer = setTimeout(() => {
this.$emit('update:value', e.detail.value)
}, 300)
}
- 或者增加焦点状态判断:
data() {
return {
isFocused: false
}
},
methods: {
onFocus() {
this.isFocused = true
this.$emit('onFocus')
},
onBlur() {
this.isFocused = false
},
onInputEvent(e) {
if(this.isFocused) {
this.$emit('update:value', e.detail.value)
}
}
}