仅在按下键时处理 VueJS 事件
Handle VueJS event only when key is pressed
我使用的是第三方库提供的VueJS组件,它有自己的事件。我可以像往常一样使用“v-on”指令处理此类事件并指定有趣的事件名称,如下所示:
<TheComponent v-on:itemchanged="handler"/>
但是只有在按下 CTRL 键时出现 'itemchanged' 时才可以 运行 处理程序吗?当未按下 CTRL 键时,处理程序不应 运行。
我试过 click.crtl 和 keydown.ctrl 但没有成功。
你没有收到这个事件的事件对象吗?通过向 handler
添加一个参数,您应该能够捕获该事件,并检查按下的是哪个键。然后只需在处理函数的开头添加一个 if
语句。
Is it possible to run handler only when 'itemchanged' occurs with CTRL key pressed?
假设 itemchanged
是由 change
事件触发的:不,并非没有解决方法。与键盘和鼠标事件不同,change
不包含键盘信息。您需要单独跟踪 ctrl 按键的状态,因为 JavaScript has no way of testing whether a key is down 在这些事件之外。
插件
实现它的一种封装方式是使用插件:
const pluginKeypresses = function(Vue) {
const keyPresses = {
Control: false
}
window.onkeyup = function(e) { keyPresses[e.key] = false; }
window.onkeydown = function(e) { keyPresses[e.key] = true; }
Vue.prototype.$keyPresses = Vue.observable(keyPresses);
}
Vue.use(pluginKeypresses);
注意:此处的 e.key
检测是截至 11/2020 的当前标准,但 not yet fully supported by IE and some other browsers. If IE matters to you, change the key detection implementation 符合您的喜好。
用法
您可以在应用程序的任何位置测试 this.$keyPresses.Control
(布尔值)
我使用的是第三方库提供的VueJS组件,它有自己的事件。我可以像往常一样使用“v-on”指令处理此类事件并指定有趣的事件名称,如下所示:
<TheComponent v-on:itemchanged="handler"/>
但是只有在按下 CTRL 键时出现 'itemchanged' 时才可以 运行 处理程序吗?当未按下 CTRL 键时,处理程序不应 运行。
我试过 click.crtl 和 keydown.ctrl 但没有成功。
你没有收到这个事件的事件对象吗?通过向 handler
添加一个参数,您应该能够捕获该事件,并检查按下的是哪个键。然后只需在处理函数的开头添加一个 if
语句。
Is it possible to run handler only when 'itemchanged' occurs with CTRL key pressed?
假设 itemchanged
是由 change
事件触发的:不,并非没有解决方法。与键盘和鼠标事件不同,change
不包含键盘信息。您需要单独跟踪 ctrl 按键的状态,因为 JavaScript has no way of testing whether a key is down 在这些事件之外。
插件
实现它的一种封装方式是使用插件:
const pluginKeypresses = function(Vue) {
const keyPresses = {
Control: false
}
window.onkeyup = function(e) { keyPresses[e.key] = false; }
window.onkeydown = function(e) { keyPresses[e.key] = true; }
Vue.prototype.$keyPresses = Vue.observable(keyPresses);
}
Vue.use(pluginKeypresses);
注意:此处的 e.key
检测是截至 11/2020 的当前标准,但 not yet fully supported by IE and some other browsers. If IE matters to you, change the key detection implementation 符合您的喜好。
用法
您可以在应用程序的任何位置测试 this.$keyPresses.Control
(布尔值)