input type=number的兼容性問題

今天遇到一個看似很普通的bug,在某幾個頁面的輸入框里輸入小數,當輸入小數點的時候validator會報錯。

本以為是個超級簡單的問題,也許是validator的驗證函數忽略了小數的情況吧。結果發現在chrome下并沒有出現同樣的問題,于是引出了一個隱蔽的兼容性問題。

當前我們的form validator會在每個輸入動作之后檢查輸入值,然后實時給出反饋。這個bug一定出現在輸入了小數點之后,比如輸入"5."之后報錯。經過一系列測試,"5."在chrome中能被querySelector正確選擇出來,而在Firefox下的querySelctor的返回值卻為空字符串。

于是google了一番,發現各個瀏覽器對如何界定小數的分隔符并不統一。對chrome來說"5."是個合法的小數,而對Firefox來說這是個非法小數。當前較好的解決辦法是在input中加入lang選項來明確指出分隔符的定義。我加入lang="en"來指明"."是小數的分隔符。經測試后問題順利解決,順便測試了法國常用的小數點分隔符",",也可以在lang="en"時正常辨認。

做了一個code的簡單例子,可以用chrome和Firefox分別測試觀察:codepen.io

測試平臺:
Chrome: Version 43.0.2357.130 Ubuntu 15.04 (64-bit)
Firefox: 42.0a2 (2015-08-16)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容