# type=number
## type=number在PC端
和type=text沒有多少區別,區別僅在不同瀏覽器會有不同的表現樣式,后面又是會多出上下增加的按鍵,但這個沒有多大意義,因為不統一,且UI巨丑。所以在PC端還是不要使用者number的玩意。
## type=number在移動端
作用體現在:輸入框focus后,彈出的鍵盤是數字鍵盤,方便用戶輸入數字,但是在Webkit內核的瀏覽器中有一些隱藏的問題。
移動端type=number的輸入框用戶仍然可以輸入漢字和字母,但是在W3C規范中:如果輸入了一些非數字的字符,則會返回空字符串,明明輸入了,但卻.value獲取不到值。
這個事情非常坑,會導致驗證的時候如果輸入非數字的時候,直接$input.value( 或者$('.selector').val() )拿不到值,而拿不到值的情況下會認為沒有填寫,如果你頁面上的一個框,要求格式須填數字格式,而又不是必填的,設置成number就會導致驗證邏輯不正常。
chrome中, 在.validity.badInput這個屬性里,可以判斷值是否正常,如果填入了非正常值,這個屬性就是true,正常值的話就是false。
但是火狐下.validity里沒有badInput屬性,它直接.value可以正常返回非數字的字符串。
IE8、9也可以直接.value獲取到非數字的字符串值,不會返回空字符串。
我又想彈出的鍵盤是數字鍵盤,又想不能輸入非數字的字符,又想獲取到input的值對其進行處理,這種終極需求如何解決?網上的答案無法同時滿足這三個需求。
解決思路:
1. 鍵盤是數字鍵盤:輸入框在focus時type必須為number
2. 獲取輸入框的值:輸入框在input時或者keypress或者keydown或者keyup時type不能是number,比如將type臨時變為text
3.
input時,將type改成text,就可以拿到值,