Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么keydown在移动设备中不起作用?vue.js 2_Javascript_Vue.js_Vuejs2_Vue Component_Vuex - Fatal编程技术网

Javascript 为什么keydown在移动设备中不起作用?vue.js 2

Javascript 为什么keydown在移动设备中不起作用?vue.js 2,javascript,vue.js,vuejs2,vue-component,vuex,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{ ... met

我试着这样:

<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>

...
...                           
导出默认值{
...
方法:{
禁用点:功能(evt){
evt=(evt)?evt:window.event
让charCode=(evt.which)?evt.which:evt.keyCode
if(charCode==190 | | charCode==189 | | charCode==187){
evt.preventDefault()
} 
否则{
返回真值
}
}
}
}
如果代码被执行并且我输入了点(.),它仍然可以

在dekstop中,它已禁用。但在移动设备中,它不会禁用

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

我怎么做

注意


在dekstop中,代码是有效的。但在移动设备中,代码不起作用。点(.)no disable in mobile

问题在于带有“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);
}

使用观察者对我来说效果最好。应该是这样的:

<template> 
    ...
    <input type="number" class="form-control" v-model="quantity" min="1">
    ...                           
</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
                }
            }

        }

        watch: {
          "quantity"(value) {
            this.disableDot();
          }
        },
    }
</script>

...
...                           
导出默认值{
...
方法:{
禁用点:功能(evt){
evt=(evt)?evt:window.event
让charCode=(evt.which)?evt.which:evt.keyCode
if(charCode==190 | | charCode==189 | | charCode==187){
evt.preventDefault()
} 
否则{
返回真值
}
}
}
观察:{
“数量”(价值){
这个.disableDot();
}
},
}

我发现了安卓设备的真正问题, 您应该如下所示禁用表单的自动完成:

<template> 
    ...
    <input type="number" class="form-control" v-model="quantity" min="1">
    ...                           
</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
                }
            }

        }

        watch: {
          "quantity"(value) {
            this.disableDot();
          }
        },
    }
</script>

 <form autocomplete="off" action="/action_page.php">