为什么 keydown 在移动设备上不起作用?Vue.js 2

Suc*_*Man 2 javascript vue.js vue-component vuex vuejs2

我尝试这样:

<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>
Run Code Online (Sandbox Code Playgroud)

如果代码执行并且我输入dot(.),它仍然可以

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

我想禁用点。所以用户不能输入点

我该怎么做?

笔记

在 dekstop 中,代码有效。但是在移动设备中,代码不起作用。点(.)在移动设备中没有禁用

skr*_*ibe 5

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

我认为您会发现使用该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);
}
Run Code Online (Sandbox Code Playgroud)

我也鼓励你看看整个事件,因为它也回来了。event.code = "Period"并且event.key = "."虽然只是event.key = "."充满对移动设备Firefox。

console.log(event);
Run Code Online (Sandbox Code Playgroud)