html输入框重置,关于自定义input输入框清空方法bug的解决方案【转载】

前两天看到一个问题:input 聚焦时 侧边清空按钮(自定义的按钮)要点击两次才能把内容清空。(真机测试时遇到)

通俗点就是说:自定义了一个清空的按钮,在input输入(聚焦)的时候,点击清空没反应。

这引起我强烈的好奇心了。

先考虑清空的按钮的事件有没有触发。

我感觉是会触发的,因为之前有做过手机号发送验证码的,没试过输入手机号的时候,点击不能触发发送验证码的情况。

测试后,果然,清空的按钮的事件是有触发,方法执行之后(setData),值是有改变了的。

那么问题来了,最后value值为什么没有变化呢?

显然,还有其他的事件触发了,执行了setData。

经过我反复的试验,bindinput触发了。bindinput,原来是它搞的鬼,为什么会触发bindinput?我就不清楚了,要问官方了。

点击清空按钮,同时触发了两个事件,两个同时存到了队列里面,虽然bindtap的方法还未执行,但是参数值已经有了,e.detail.value的值就是原本输入框里面的值。所以,执行完两个事件之后的结果是,input的值没有发生变化,导致大家以为,清空事件没有触发,或者清空事件没有作用。

原因找到了,点击清空的时候,触发了bindinput。为什么会触发呢,怎么让它不触发呢,这就留给小程序去解决吧,不是我们用户能解决的了。我们要解决的是,怎么实现input聚焦时能直接清空。

“只要思想不滑坡,办法总比困难多”。既然找到了原因,那解决办法肯定是会有的。我测试的时候发现,清空方法是比bingtap的方法先执行的,所以想到了一个解决方法:

在data里面声明一个boolean变量值为false,在执行清空方法的时候,赋值为:true,执行bindtap方法的时候,判断该变量,为true就不执行setData操作了,为false则继续。

代码:

2d4560ffde21

这样做,就算清空方法不是比bingtap的方法先执行的,也不会有影响。简单测试了一下,解决了。

总结:以上就是我对input输入框清空bug的探索过程,解决方法也是我想到的最简单的做法了。因为没有经过大量测试验证,所以不知道会不会有其他问题。要是有bug,或者有其他解决方法,欢迎各位大大留言。

下图中的方法,试了一下,也管用。推荐大家尝试一下

2d4560ffde21

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值