最低"
@input="quantityInput"/>
function quantityInput(e) {
const value = formatValue(e.detail.value)
nextTick(() => {
bu.quantity = value
})
}
export function formatValue(value) {
let val = String(value)
val = val.replace(/(^\s)|(\s$)/g, '')
if (!val) {
return ''
}
val = val.replace(/^0{2,}./g, '0')
val = val.replace(/^0([1,2,3,4,5,6,7,8,9])/g, '$1')
val = val.replace(/[^\d.]/g, '')
val = val.replace(/^./g, '')
val = val.replace('.', '$#$').replace(/./g, '').replace('$#$', '.')
val = val.replace(/^(-)(\d+).(\d{2}).*$/, '$1$2.$3')
return val
}
3 个回复
Ask小助手
这个 bug 反馈的信息基本完整,但存在几个需要补充和澄清的关键点,同时这是一个已知的历史问题。
关于反馈内容的评审:
复现步骤描述过于简略,仅写了"输入"两个字,建议补充具体操作流程,例如:"点击输入框,尝试输入小数点(.)观察是否能正常输入"。另外代码示例中包含了自定义的
formatValue函数逻辑,该函数对输入值进行了复杂的正则替换处理,这可能会干扰原生输入行为,建议在复现时先注释掉@input事件处理,排除业务代码干扰。关于问题本身的技术分析:
根据历史更新日志,iOS 16 系统 input 组件 type=digit 无法输入小数点 是一个已知问题,已在 3.6.7.20221018-alpha 版本中修复 (详情)。您使用的 HBuilderX 4.85 版本理论上是包含该修复的。
如果问题仍然存在,可能的原因包括:
代码逻辑干扰:您代码中的
formatValue函数在@input事件中通过nextTick重新赋值,这种处理方式在 Vue3 响应式环境下可能与 iOS 16 的原生键盘行为产生冲突,导致小数点输入被过滤特定 iOS 版本兼容性:虽然 3.6.7 版本已修复 iOS 16 的该问题,但 iOS 16.5.1 可能存在特定的键盘行为差异
建议的解决方案:
升级 HBuilderX:建议升级到最新正式版(当前为 5.04)或 Alpha 版(5.03),确认问题是否仍然存在
使用 inputmode 替代:如果您使用的是 5.0+ 版本,可以考虑使用
inputmode="decimal"替代type="digit",该属性专门用于小数输入键盘 (详情)使用插件市场组件:如果原生组件仍有兼容性问题,建议使用插件市场的数字输入组件,如 qisi-number-box 或 nx-number-input,这些组件通常处理了各平台的兼容性细节
排除业务代码干扰:建议先移除
formatValue处理逻辑,测试纯type="digit"是否能输入小数点,以确认是否为业务代码导致的问题补充说明:
根据 input 组件文档,
type="digit"在 App 平台、H5 平台的 Vue 页面在 iOS 平台显示的键盘包含负数(但原生键盘不支持负号输入),这是符合预期的行为 (详情)。如果上述方案仍无法解决,建议提供更详细的复现视频或在专业群进一步排查。648445400
问题还是存在 hbuiderx 5.06版本,ios16 -ios18系统都无法输入小数点
l***@163.com (作者)
算了 社区也没人解决
要回复问题请先登录或注册
公告
更多>相关问题