javascript - 为什么 keydown 在手机上不起作用? vue.js 2

标签 javascript vue.js vuejs2 vue-component vuex

我尝试这样:

<template> 
    ...
    <input type="number" class="form-control" v-model="quantity" min="1" v-on:keydown="disableDot">
    ...                           
</template>
<script>
    export default{
        ...
        methods:{
            disableDot: function(evt) {
                evt = (evt) ? evt : window.event
                let charCode = (evt.which) ? evt.which : evt.keyCode
                if (charCode === 190 || charCode === 189 || charCode === 187) {
                    evt.preventDefault()
                } 
                else {
                    return true
                }
            }

        }
    }
</script>

如果代码执行后我输入点(.),仍然可以

在桌面上,它已禁用。但在移动设备上,它不会禁用

我想禁用点。所以用户无法输入点

我该怎么做?

注意

在桌面上,代码可以运行。但在移动设备上,该代码不起作用。点(.)在移动设备中不禁用

最佳答案

问题是“keydown”或“keyup”的键码在不同浏览器中似乎不一致。也许操作系统也有影响。您可以在各种浏览器和移动设备上对此进行测试 here

我认为使用 v-on:keypress 事件您会发现更加一致。在我的快速(移动设备上不完整)测试中,以下内容始终返回“46”。快速警告,我注意到输入“.”在我的 Android 键盘上的 Firefox Mobile 上,我收到了两个按键事件。

//in template
<input type="number"  v-on:keypress="capturePress($event)">

//in methods
capturePress: function(event) {
    console.log(event.charCode);
}

我还鼓励您查看整个事件,因为它也回归了。 event.code = "Period"event.key = ".",尽管在​​移动 Firefox 上仅填充了 event.key = "." .

console.log(event);

关于javascript - 为什么 keydown 在手机上不起作用? vue.js 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46640328/

相关文章:

javascript - 我可以让 Vue.js 跨站点保持事件状态吗?

javascript - 如何使用 JavaScript 防止手指触摸(在触摸屏上)?

javascript - 小部件 - Iframe 与 JavaScript

node.js - npm 运行开发失败 : ValidationError: Invalid options object

javascript - 全屏时文档正文为空

vue.js - 将自定义错误添加到vee验证器(ErrorBag)

vue.js - 如何解决Vue router change error with param?

javascript - $digest 循环后 Angular 如何更新 View ?

javascript - 模态对话框解析忽略传递的属性值

json - Vue.js 中导入的 json 值不正确