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. docker容器呢SSH为什么连不通呢?2. docker images显示的镜像过多,狗眼被亮瞎了,怎么办?3. Docker for Mac 创建的dnsmasq容器连不上/不工作的问题4. 请问“由于 Cookie “PHPSESSID”的“SameSite”属性设置为“None”,但缺少“Secure”属性,此 Cookie 未来将被拒绝。”请问出现这个问题怎么办?5. 前端 - 类到底该如何去命名 .newsList 这种的命名难道真的不是过度语义化吗?~6. docker api 开发的端口怎么获取?7. golang - 用IDE看docker源码时的小问题8. docker start -a dockername 老是卡住,什么情况?9. 如何解决Centos下Docker服务启动无响应,且输入docker命令无响应?10. docker网络端口映射,没有方便点的操作方法么?

网公网安备