解决type="number",第一个字输入中文后方向改变-前端板块造梦空间论坛-技术交流-造梦空间论坛

解决type="number",第一个字输入中文后方向改变

文章目录[隐藏]

最近在使用input时,发现了一个问题,就是number的字体是在中间的,我们首先输入中文,就会导致字体变成左边的了。

在Chromium的issues里也没人提,使用各种办法都没用(别试了)。此处作者想到用宏任务(严谨来说叫做时间任务队列)解决:

var ni = document.querySelector(".number");

ni.addEventListener('keypress',()=>{
    ni.value = "0";
    setTimeout(()=>{
        ni.value = ""
    },0)
})

原理:

在浏览器中,这是一个bug,所以不是我们可以去从根本上解决的。

在HTMLOpenSyntax概念中,就是如果更改了一个元素的内容,会导致元素的内容修改,因为元素的内容原本是个HTMLElement,我们给追加的内容会被理解为一个Element,会导致重新渲染dom树。(作者也不知道是不是真的)

也就是说,我们更改ni.value,就会导致元素更改,会重置状态,也就变成正常了的。但是我们设置了ni.value=0,那么会导致内容变成0。

为了解决,我们可以创建一个宏任务,要求立刻将ni.value。为什么要创建宏任务?因为浏览器的渲染本身就是宏任务,使用setTimeout,会将内容创建在宏任务队列中,在一次渲染结束后,再更改内容。

用浏览器渲染本身就是宏任务这一特点,我们可以写出很多效果,例如防止卡顿之类的,在这些面上,我们就可以不用去写微任务了,直接写宏任务。

请登录后发表评论

    没有回复内容

© 造梦空间论坛