javascript - vue 移動端的input 數字輸入優化
問題描述
這是移動端使用的, input type 為number 時 英文或中文都沒有限制,而且maxlength不起作用,input type 為tel 時 英文或中文也都沒有限制,但maxlength有作用,所以用tel,keyup 是為了過濾數字以外的字符。請問大神這段代碼還有沒有優化的空間?
<input v-model='phoneNumber' placeholder='輸入手機號' type='tel' maxlength='11' @keyup='handleFilterLetters'><script type='text/javascript'> vm = new Vue({ el: '#app', data: {phoneNumber: null, }, methods: {handleFilterLetters: function(){ var self = this; self.phoneNumber=self.phoneNumber.replace(/[^d]/g,’’);}, }})</script>
問題解答
回答1:phoneNumber 初始值應該是字符串的 ’’,否則對一個可能為 null 的變量調用 replace 是不安全的。
var self = this 是不必要的。
handleFilterLetters 好長啊,改成 onKeyUp 不好讀一點嗎(
<input> 一行寫的太長了,eslint-airbnb 的規則是
<input v-model='phoneNumber' placeholder='輸入手機號' type='tel' maxlength='11' @keyup='handleFilterLetters'/>回答2:
樓上說的都對題主還可以多注意一下 code style 比如:self.phoneNumber=self.phoneNumber.replace(/[^d]/g,’’);
寫成self.phoneNumber = self.phoneNumber.replace(/[^d]/g,’’);
比較好
回答3:這里用的局部filter
如果想可復用程度高點,全局filter也可以的
<p > <input :value='phone | num' @keyup='phoneChange' /></p>
var app = new Vue({ el: '#app', data: { phone: '' }, methods: { phoneChange(e) { this.phone = e.target.value this.$forceUpdate() // 這里必須有 } }, filters: { ’num’: function(value) { return value.replace(/[^d]/g, ’’) } }})
相關文章:
1. javascript - js 有什么優雅的辦法實現在同時打開的兩個標簽頁間相互通信?2. html5和Flash對抗是什么情況?3. javascript - 怎樣限制同一個瀏覽器不能登錄兩個賬號4. java - 新手做一個安卓視頻播放器,想實現一個進度條,按鈕那種在視頻下方懸浮的功能,不知道思路!5. css3 - Typecho 后臺部分表單按鈕在 Chrome 下出現靈異動畫問題,求解決6. javascript - angular和jquery都用到了$符號,一起用會不會沖突?7. java - android代碼重構:如何把app設置里的頭像UI做成通用的?8. 想找個php大神仿個網站。9. javascript - 一個抽獎的效果(如圖)?10. javascript - jquery怎么給select option一個點擊時觸發的事件,如圖 如果選擇自定義觸發一個時間?
