javascript - 按下按钮时如何模拟按下不同的按钮?

标签 javascript vue.js vuejs2

是否可以使用 vue.js 在按下按钮时模拟按下另一个按钮?

例如,如果我按下 (向下箭头)按钮,我希望它被表示为好像我按下了 TAB 按钮。

解释我为什么要尝试实现这个:

单击下拉列表后,将打开包含所有元素的列表。在此列表中,我有一个 <input>元素作为搜索框,用于搜索列表中的其他元素(所有其他元素都直接列在该搜索框下)。目前,当下拉列表打开时,焦点会自动设置到搜索框。要转到下一个项目,您必须按 TAB 按钮。但我需要使用 (向下箭头)按钮来实现这一点。

最佳答案

认为您是在问如何在用户按下 DOWN 时模拟 TAB 按键,目的是将焦点移至下一个可聚焦输入。

您可以调用 HTMLElement#focus() 而不是重写 key 事件在下一个 sibling 上:

<!-- TEMPLATE -->
<input type="text"
    @keydown.up.stop.prevent="prevInput"
    @keydown.down.stop.prevent="nextInput"
    v-for="i in 5">

// SCRIPT
methods: {
  nextInput(e) {
    const next = e.currentTarget.nextElementSibling;
    if (next) {
      next.focus();
    }
  },
  prevInput(e) {
    const prev = e.currentTarget.previousElementSibling;
    if (prev) {
      prev.focus();
    }
  },
}

<script src="https://unpkg.com/vue@2.5.17"></script>

<div id="app">
  <input type="text"
         @keydown.up.stop.prevent="prevInput"
         @keydown.down.stop.prevent="nextInput"
         v-for="i in 5">
</div>

<script>
new Vue({
  el: '#app',
  methods: {
    nextInput(e) {
      const next = e.currentTarget.nextElementSibling;
      if (next) {
        next.focus();
      }
    },
    prevInput(e) {
      const prev = e.currentTarget.previousElementSibling;
      if (prev) {
        prev.focus();
      }
    },
  }
})
</script>

关于javascript - 按下按钮时如何模拟按下不同的按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52449306/

相关文章:

javascript - Vue.js 路由器 : Run code when component is ready

javascript - Vue.js 没有设置数据对象数组中声明的属性

javascript - 危险地 react SetInnerHTML 以呈现从 Prop 嵌入的 iframe youtube?

javascript - JS中的函数声明速度差异

javascript - 选择后选择vue组件关闭下拉

vue.js - 如何使用 Vuex 模块发布 Vue.js NPM 包?

vue.js - 未知的自定义元素 <v-expansion-panels>?

javascript - CoffeeScript : if . 。是..那么

javascript - Canvas 后 child 的位置是 chrome 和 safari 之间的区别

vue.js - vue 和 webpack 不会在组件中进行延迟加载?