uni-app textarea设置 inputmode='none' :focus="true" 首次打开仍会弹出键盘
uni-app textarea设置 inputmode=‘none’ :focus=“true” 首次打开仍会弹出键盘
示例代码:
<textarea style="background-color: #aaff00;" inputmode='none' :focus="true"></textarea>
操作步骤:
直接运行就能复现
预期结果:
:focus="true"的时候不弹出键盘
实际结果:
:focus="true"的时候会弹出键盘
bug描述:
textarea设置 inputmode=‘none’ :focus="true"首次打开还是会弹出键盘
手机的webview版本是83
信息 | 描述 |
---|---|
产品分类 | uniapp/App |
PC开发环境 | Windows |
PC系统版本号 | win10 |
HBuilderX类型 | Alpha |
HBuilderX版本 | 3.99 |
手机系统 | Android |
手机系统版本号 | Android 11 |
手机厂商 | 小米 |
手机机型 | 小米9 |
页面类型 | vue |
vue版本 | vue2 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
来个人回复下啊
来个人回复下
这样试试
<template>
<textarea ref="myTextarea" input-mode="none"></textarea>
</template>
来个人回复下
:focus=“true”
这样设置就是 默认调起 键盘 (●’◡’●),不想进入页面出现键盘直接设置为 false ,也可以 :focus=“变量” 来控制
还没有解决
还没有解决
还没有解决
还没有解决
没有人吗
顶顶顶顶顶顶顶他一起
顶顶顶顶顶顶顶
focus:true不是默认聚焦吗,肯定会弹出键盘啊
使用inputMode=‘none’ 禁止弹出键盘了,但是只要聚焦还是会出来
到现在了 还没解决!!!
还没解决??????~~~
inputmode="none"并不是所有平台都支持。在App平台上,即使你设置了inputmode=“none”,键盘可能还是会弹出。
如果还没有解决的话,可以使用uni.hideKeyboard();来隐藏软键盘,你不是需要设置:focus="true"吗?可以用@focus监听一下聚焦事件,然后再聚焦回调中关闭软键盘。
focus(){
uni.hideKeyboard();
}
在uni-app中,textarea
组件默认会在获取焦点时弹出软键盘,这是为了提供良好的用户体验,方便用户直接输入内容。然而,有时候我们可能希望在某些特定场景下阻止键盘的弹出,比如在展示只读文本或者某些自定义输入场景中。
尽管HTML标准中的inputmode='none'
属性旨在控制移动设备上虚拟键盘的行为,但在实际开发中,并不是所有浏览器和框架都能完美支持这一属性。对于uni-app来说,单纯设置inputmode='none'
可能并不足以阻止键盘的弹出,尤其是在组件首次获取焦点时。
为了解决这个问题,我们可以结合JavaScript来控制textarea
的焦点行为。以下是一个可能的解决方案,通过编程方式控制焦点的设置,并在必要时阻止键盘的弹出:
<template>
<view>
<textarea
ref="myTextarea"
@focus="handleFocus"
v-model="text"
:inputmode="'none'"
style="height: 100px; width: 100%;"
></textarea>
</view>
</template>
<script>
export default {
data() {
return {
text: '',
};
},
mounted() {
// 尝试在组件挂载后立即设置焦点,但随后立即移除,以避免键盘弹出
this.$nextTick(() => {
this.$refs.myTextarea.focus();
this.blurTextareaImmediately();
});
},
methods: {
handleFocus(event) {
// 在这里可以根据需要处理焦点事件,但默认阻止键盘弹出
this.blurTextareaImmediately();
},
blurTextareaImmediately() {
// 使用setTimeout来确保focus事件处理完毕后再blur
setTimeout(() => {
this.$refs.myTextarea.blur();
}, 0);
},
},
};
</script>
<style scoped>
/* 样式可以根据需要调整 */
</style>
在这个例子中,我们通过ref
引用textarea
组件,并在组件挂载后立即尝试设置焦点,但紧接着通过一个setTimeout
(设置为0毫秒延迟)来移除焦点。这种方法利用了JavaScript的事件循环机制,确保在焦点事件处理完毕后立即移除焦点,从而避免键盘的弹出。
请注意,这种方法可能不是所有场景下都适用,特别是如果textarea
需要在某些用户交互后变为可编辑状态,那么就需要更复杂的逻辑来处理这些场景。此外,不同平台和浏览器的行为也可能有所不同,因此在实际应用中需要进行充分的测试。