前言
程序員小周經(jīng)過一周的加班終于可以功能提測动猬,sei知道測試姐姐剛開始測就告訴小周,你這不行经瓷,你這些輸入字段都應(yīng)該限制成數(shù)字,小周一聽什猖,好辦啊,改個type類型唄红淡,卡卡改完代碼不狮,卡卡就提交啦!這時候產(chǎn)品哥哥跑過來躍躍欲測在旱,我滴天摇零,這個e是幾個意思,這個+桶蝎,-驻仅,.是咋個回事谅畅,留下目瞪口呆卡卡打臉滴小周,臨走產(chǎn)品哥哥還安慰小周噪服,沒事毡泻,這個一百度就解決了= =|||
然后
小周跟這個e杠上了,不明白這個e到底是個啥身份粘优,你又不是數(shù)字仇味,你瞎湊什么熱鬧。一查目瞪口呆.jpg敬飒,e = 2.71828邪铲!好吧,看我怎么消滅你无拗!
不出意外,如果你也是搜索input type number e的話昧碉,相信你一定能看到這個聲稱一句話搞定滴解決方式
<input type="number" onKeypress="return (/[\d]/.test(String.fromCharCode(event.keyCode)))">
如果你直接cope到你的react代碼里面英染,第一步會報錯告訴你onKeypress不存在,好吧被饿,改成onKeyPress四康,不對,onKeyPress得賦個function狭握,不能是string闪金。那接著抽個方法
handleKeyPress(event) {
return (/[\d]/.test(String.fromCharCode(event.keyCode)));
}
//render
<input type="number" onKeypress={this.handleKeyPress}>
不出意外,這個時候你的e论颅,+哎垦,-等等這些討厭的字符還是存在,你找了好久恃疯,才發(fā)現(xiàn)event里面根本就沒有keyCode漏设,只有key,charCode今妄,然后你又改
handleKeyPress(event) {
return (/[\d]/.test(String.fromCharCode(event.charCode)));
}
//render
<input type="number" onKeypress={this.handleKeyPress}>
咦郑口,說好的一句話解決的呢!騙子盾鳞,不好使犬性!為什么呢!
仔細瞅瞅這句話腾仅,用正則驗證每次輸入的單個字符乒裆,即使返回false也并沒有卵用啊,為了驗證
<input type="number" onKeypress={false}>
哎果然攒砖,現(xiàn)象是一樣的缸兔。
換個思路吧日裙,其實就是想當(dāng)key是e,E惰蜜,+昂拂,-,.的時候阻止它的默認行為
handleKeyPress(event) {
const invalidChars = ['-', '+', 'e', '.', 'E']
if(invalidChars.indexOf(event.key) !== -1){
event.preventDefault()
}
}
//render
<input type="number" onKeypress={this.handleKeyPress}>
果然抛猖,搞定啦格侯!
附上其他解決方式:https://stackoverflow.com/questions/39291997/how-to-block-e-in-input-type-number