uniapp 输入框聚焦如何实现
在uniapp中如何实现输入框自动聚焦?我尝试在onLoad生命周期里调用focus()方法,但发现输入框没有自动获取焦点。请问正确的实现方式是什么?是否需要配合nextTick使用?在iOS和安卓平台上是否存在差异?
2 回复
在 UniApp 中,可以通过以下方法实现输入框聚焦:
1. 使用 ref 获取组件实例
<template>
<view>
<input ref="myInput" type="text" placeholder="请输入内容" />
<button @click="focusInput">聚焦输入框</button>
</view>
</template>
<script>
export default {
methods: {
focusInput() {
// 通过 ref 获取输入框实例并聚焦
this.$refs.myInput.focus()
}
}
}
</script>
2. 使用组件自带的 focus 属性
<template>
<view>
<input
:focus="isFocused"
type="text"
placeholder="请输入内容"
/>
<button @click="isFocused = true">聚焦输入框</button>
</view>
</template>
<script>
export default {
data() {
return {
isFocused: false
}
}
}
</script>
3. 页面加载时自动聚焦
<template>
<view>
<input ref="autoFocusInput" type="text" placeholder="页面加载自动聚焦" />
</view>
</template>
<script>
export default {
onReady() {
// 页面准备好后自动聚焦
this.$nextTick(() => {
this.$refs.autoFocusInput.focus()
})
}
}
</script>
4. 多个输入框切换聚焦
<template>
<view>
<input ref="input1" type="text" placeholder="输入框1" />
<input ref="input2" type="text" placeholder="输入框2" />
<button @click="focusNext(1)">聚焦输入框1</button>
<button @click="focusNext(2)">聚焦输入框2</button>
</view>
</template>
<script>
export default {
methods: {
focusNext(index) {
if (index === 1) {
this.$refs.input1.focus()
} else if (index === 2) {
this.$refs.input2.focus()
}
}
}
}
</script>
注意事项:
- 在 H5 端,部分浏览器可能需要用户交互(如点击事件)才能触发聚焦
- 在 iOS 端,确保输入框在可视区域内,否则可能无法正常聚焦
- 使用
onReady生命周期确保组件已渲染完成
选择适合你场景的方法即可实现输入框聚焦功能。


