javascript - vue 行動端的input 數位輸入最佳化
phpcn_u1582
phpcn_u1582 2017-07-05 10:59:49
0
3
1001

這是行動端使用的,
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>
phpcn_u1582
phpcn_u1582

全部回覆(3)
迷茫
  1. phoneNumber 初始值應該是字串的 '',否則對一個可能為 null 的變數呼叫 replace 是不安全的。

  2. var self = this 是不必要的。

  3. handleFilterLetters 好長啊,改成 onKeyUp 不好讀一點嗎(

  4. 一行寫的太長了,eslint-airbnb 的規則是

<input
  v-model="phoneNumber"
  placeholder="输入手机号"
  type="tel"
  maxlength="11"
  @keyup="handleFilterLetters"
/>
刘奇

樓上說的都對
題主還可以多注意一下 code style
例如:
self.phoneNumber=self.phoneNumber.replace(/[^d]/g,'');

寫成
self.phoneNumber = self.phoneNumber.replace(/[^d]/g,'');

比較好

仅有的幸福

這裡用的局部filter

如果想可重複使用程度高點,全域filter也可以的

<p id="app" >
  <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, '')
    }
  }
})
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板