javascript - 单击JavaScript中的按钮后如何触发键盘“keydown”事件?
问题描述
单击 Vue.js 项目中的按钮后,我想触发键盘事件(keydown 向上/向下箭头)。
我尝试使用dispatchEvent(new KeyboardEvent("keydown", { keyCode: 38/40 }))
向上和向下箭头键。
<template>
...
<div class="position-relative input-field__wrapper">
<input
class="input-field__input"
ref="numberInput"
type="number"
:name="name"
:id="randomId || id"
:value="value"
:min="min"
:max="max"
:step="step"
:disabled="disabled"
:aria-disabled="toString(disabled)"
@input="$emit('input', e)"
@change="$emit('change', e)"
/>
<button
aria-label="increment"
class="increment position-absolute h-50"
:disabled="incrementDisabled"
:aria-disabled="toString(incrementDisabled)"
@click="increment"
></button>
<button
aria-label="decrement"
class="decrement position-absolute h-50"
:disabled="decrementDisabled"
:aria-disabled="toString(decrementDisabled)"
@click="decrement"
></button>
</div>
...
</template>
<script>
...
methods: {
increment() {
this.$el
.getElementsByClassName("increment")[0]
.dispatchEvent(new KeyboardEvent("keydown", { keyCode: 38 }));
},
decrement() {
this.$el
.getElementsByClassName("decrement")[0]
.dispatchEvent(new KeyboardEvent("keydown", { keyCode: 40 }));
},
}
...
</script>
我只是不想添加这么多方法,只想让我的按钮在数字输入时像键盘一样上下。
解决方案
看起来您的父组件正在处理 keyup 和 keydown 事件。这是你如何做到的。
<template>
...
<div class="position-relative input-field__wrapper">
<input
class="input-field__input"
ref="numberInput"
type="number"
:name="name"
:id="randomId || id"
:value="value"
:min="min"
:max="max"
:step="step"
:disabled="disabled"
:aria-disabled="toString(disabled)"
@input="$emit('input', e)"
@change="$emit('change', e)"
/>
<button
aria-label="increment"
class="increment position-absolute h-50"
:disabled="incrementDisabled"
:aria-disabled="toString(incrementDisabled)"
@click="$emit('keydown', { keyCode: 38 })"
></button>
<button
aria-label="decrement"
class="decrement position-absolute h-50"
:disabled="decrementDisabled"
:aria-disabled="toString(decrementDisabled)"
@click="$emit('keydown', { keyCode: 40 })"
></button>
</div>
...
</template>
如果您想要带有关键代码的原始事件,您可以执行类似的操作
@click=e => $emit('keydown', { ...e, keyCode: 38 })
推荐阅读
- python - 使用自定义比例在 matplotlib 3.0.3 中未显示刻度
- angular - 在 2 个 div 上同步滚动
- css-animations - 有没有办法阻止我的 CSS 关键帧动画开始,直到该元素在视图中滚动?
- jakarta-ee - Java EE 不同的页面和服务认证机制
- google-drive-api - 使用 Google Drive API 编辑其他用户的文件
- angular - 需要编写 ngRx 选择器来选择给定日期范围内的数据吗?
- c# - 验证不适用于 mvc 5 中的 Ajax 调用
- node.js - 无法获取生成的快速代码(来自 OpenAPI)以捕获查询参数中的错误
- docker - 无法在 Docker-Compose 中转发/映射内部端口
- splunk - Splunk 仪表板 - 搜索查询中的令牌