vue.js - 仅在按下按键时处理 VueJS 事件

标签 vue.js vue-directives

我使用第三方库提供的VueJS组件,它有自己的事件。我可以像往常一样使用“v-on”指令并指定有趣的事件名称来处理此类事件,如下所示:

<TheComponent v-on:itemchanged="handler"/>

但是只有当按下 CTRL 键发生“itemchanged”时才可以运行处理程序吗?当未按下 CTRL 键时,处理程序不应运行。

我尝试使用 click.crtl 和 keydown.ctrl 但没有成功。

最佳答案

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 。如果 IE 对您很重要,请更改 key detection implementation根据您的喜好。

使用

您可以从应用程序中的任何位置测试 this.$keyPresses.Control ( bool 值)

Demo

关于vue.js - 仅在按下按键时处理 VueJS 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64782040/

相关文章:

javascript - 在 Vue 中为组件设置 'default' v-on 事件

javascript - v-else-if 在 vuejs : Failed to resolve directive: else-if 中不起作用

javascript - 浏览器。 Vuejs 中 $v 和 $event 分别代表什么?

vue.js - 如何在 Vuex 中获取和重置模块

javascript - 将 VueJS 组件渲染到 Google Map Infowindow

vue.js - 在 Vue JS 和 Tailwind CSS 中单击时如何更改按钮

javascript - Vue.js 项目 - CSS 模块的模块构建失败

vue.js - v-for 与 v-if 处于同一级别,影响 v-else

具有单选按钮动态列表的 Vue.js v-model

vue.js - 是否可以使用指令拦截 vue 渲染模板