taro 兼容支付宝小程序和微信小程序<六>-- 自定义密码或验证码输入框组件的input 自动获取焦点(ios支付宝小程序怎么隐藏input的光标)

本文探讨了在不同小程序平台(如微信小程序与支付宝小程序)中实现自定义密码或验证码输入框自动聚焦并拉起键盘的方法。针对支付宝小程序及iOS设备的限制,提出了四种解决方案,并详细介绍了方案四的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目:tar3 + vue3

问题: 自定义密码或验证码输入框需要自动聚焦,拉起键盘
A. 微信小程序: 用了自定义指令达到这个目的
自定义密码或验证码输入框
input自动获取焦点之坑

B. 支付宝小程序:官方文档中说不支持自动获取焦点,必须手动拉起
在这里插入图片描述
所以自定义指令在支付宝小程序&&ios下是无效的,需要另辟蹊径。

方案一:

页面中还是一个input, 覆盖在box之上,然后隐藏input, 输入内容时,关联的方式还是和之前一样
在这里插入图片描述
设置input为 opacity: 0; 但是ios的光标依然在

方案二:

在方案一的基础上,input获取focus时,onfocus时将input移出可视窗,悲催的是ios的光标依然依然存在…

方案三:

在方案一的基础上,input的宽超过一屏,这样光标就在可视窗外
在这里插入图片描述
光标如期的隐藏了,显示出现了新的问题,拉起键盘时,页面整体掉下去了,如下:
在这里插入图片描述
方案四:
在方案三的基础上,input设置右对齐,这样把光标隐藏到可视窗的右侧,完美解决
在这里插入图片描述

<view class="base-input-nature-list f-c-c">
  <view
    class="box-item f-c-c"
    v-for="(item, index) in max"
    :key="`box-item-${index}`"
    @tap="onClickBoxItem">
    {{ type === 'pwd' ? inputList[index] : pwdList[index] }}
  </view>


<input
  v-if="isAlipay && isIos"
  class="input-ios"
  type="number"
  :maxlength="max"
  :value="inputValue"
  @input="onInput($event)" />
</view>

<view
v-if="isAlipay && !isIos || isWeapp"
class="base-input-nature-list-input">
<input
  v-focus="isFocus"
  type="number"
  :maxlength="max"
  :value="inputValue"
  @input="onInput($event)"
  @blur="onBlurInput" />
</view>

.base-input-nature-list {
  position: relative;
  overflow: hidden;
  // other css
}
.input-ios {
  position: absolute;
  top: 0;
  left: 0;
  margin-right: -400px;
  width: 800px;
  color: #fff;
  background: transparent;
  text-indent: 20px;
  text-align: right;  // 很重要
  opacity: 0;
}

其他逻辑见 自定义密码或验证码输入框

### Taro UI 中 Alinput 组件密码自动重置问题解决方案 在开发过程中遇到 iOS 真机微信小程序中的 `Input` 密码框因类型切换而导致内容丢失的问题,可以通过特定方法来规避此现象。一种推荐的方式是采用双输入框策略,即分别创建一个用于显示明文 (`password=false`) 密文 (`password=true`) 的 `Input` 元素,并通过逻辑控制其显隐状态[^1]。 以下是实现该方案的具体代码示例: ```jsx import React, { useState } from 'react'; import { View, Input } from '@tarojs/components'; const PasswordInput = () => { const [value, setValue] = useState(''); const [isPasswordVisible, setIsPasswordVisible] = useState(false); return ( <View> {/* 显示为明文 */} {!isPasswordVisible && ( <Input type="text" value={value} onInput={(e) => setValue(e.detail.value)} placeholder="请输入密码(明文)" /> )} {/* 显示为密文 */} {isPasswordVisible && ( <Input type="password" value={value} onInput={(e) => setValue(e.detail.value)} placeholder="请输入密码(密文)" /> )} {/* 切换按钮 */} <Button onClick={() => setIsPasswordVisible(!isPasswordVisible)}> {isPasswordVisible ? '隐藏密码' : '显示密码'} </Button> </View> ); }; export default PasswordInput; ``` 上述代码中定义了一个名为 `PasswordInput` 的组件,它利用两个独立的 `Input` 来处理密码的展示形式。当用户点击切换按钮时,会动态调整当前可见的 `Input` 类型,而会触发原有值的清空行为。 另外,在实际项目中如果使用到完整的 UI 框架支持,则可以考虑安装并配置 **Taro-UI** 提供的功能模块[^2]。虽然官方文档并未直接提及针对此类场景优化过的内置控件,但开发者可以根据需求自定义扩展者参考社区分享的经验案例[^3]^。 最后值得注意的是,尽管单独修改属性如 `type` 者 `password` 可能看似简单快捷,但在某些环境下仍存在兼容性隐患,因此更稳妥的做法始终是分离同模式下的渲染逻辑[^4]。 ####
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Misha韩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值