input type=number的那些坑

瀏覽器支持

<input type="number"> 目前主要是chorme支持, safari和IE都不支持.
請(qǐng)注意safari不支持的話, 就意味著在iphone上用chorme也不支持, 因?yàn)閕phone上的chorme還是safari的內(nèi)核.
下圖為iphone內(nèi)chorme截圖,

image.png

奇葩的是改成type="number"之后, focus之后默認(rèn)彈出的是數(shù)字輸入, 但是內(nèi)容不做任何限制

字符限制

以下為支持該類型時(shí),能允許輸入的全部字符.

image.png

如果測(cè)試人員比較雞毛, 堅(jiān)持認(rèn)為e, -, +不屬于數(shù)字類型, 抓緊棄用.
如果你覺得可以加過(guò)濾去干掉這幾個(gè)字符, 參考下一段內(nèi)容.

Andriod的坑

type="number"很友好的一點(diǎn)就是在手機(jī)上訪問(wèn)時(shí), 都會(huì)默認(rèn)彈出數(shù)字小鍵盤或者數(shù)字輸入?yún)^(qū)域.
在我測(cè)試的android機(jī)上, 甚至只能停留在數(shù)字輸入小鍵盤上, 不能切換.
但是根據(jù)不同的系統(tǒng), 三星(S6)的小鍵盤是純數(shù)字的, 不包含- +這種符號(hào), 但是華為(mate 30)的就默認(rèn)包含- +.

奇葩的是, 此時(shí)輸入-或者+根本不觸發(fā)onChange事件, 但是輸入純數(shù)字就可以觸發(fā).
改成type="text"之后, onChange事件又完美觸發(fā)了.

順便說(shuō)下keyDown, keyUp, keyPress等事件在手機(jī)端都不支持.

解決方案

react寫法舉例:

<input
    value={value}
    type="text"
    onChange={e => {
      if(/^\d*\.?\d*$/.test(e.target.value)) {
        setValue(e.target.value)
      }
    }}
>

簡(jiǎn)單來(lái)說(shuō)就是正則過(guò)濾, 放棄type=number.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容