简体   繁体   中英

vue.js arrowkey binding issues

I am in the process of building my first Vue.js project, and I would like to navigate between pages (prev page/next page) through the left and right keyboard arrow keys.

I've created a simple alert test (and attached my code at the bottom of my ask) to demonstrate the problem I'm facing. When using v-on:click , the alert method I created works perfectly fine. I've tried using v-on:keyup , v-on:keydown , and v-on:keypress and neither option triggered an alert to indicate the arrowkey functionality was working.

I discovered this 3+ year old thread detailing a similar problem, and one of the comments described the method I'm using as being a working solution since v1.0.0. I've checked the key modifier documentation of the current version of Vue and it seems as though I am doing everything correctly.

I'm most likely missing something crucial, but after much experimentation and research, I could use some help. Thanks in advance!

 new Vue({ el: "#app", methods: { popupLeft: function(){ alert("You have gone to the previous page"); }, popupRight: function(){ alert("You have gone to the next page"); }, popupClose: function(){ alert("You have closed this page"); }, } })
 <script src="https://unpkg.com/vue@2.5.13/dist/vue.js"></script> <div id="app"> <button @keyup.left="popupLeft">Prev Page</button> <button @keyup.right="popupRight">Next Page</button> <button @click="popupClose">Close Page</button> </div>

Your code works just as expected.

If you go to JSFiddle of example above and click the button at first and then use arrows - it will call corresponding events.

The reason is that you've added @keyup listeners to buttons, meaning, only if button element is in focus and @keyup event fires - it will be handled.

In order to use arrow navigation, keyup (or keydown for my preference) event should be handled from window or document .

To do that, native event listener should be added with component's handlers:

JSFiddle

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM