V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Jiki
V2EX  ›  问与答

Vue 在按钮上添加键盘事件监听,直接按键不响应,得点击一次才行。

  •  1
     
  •   Jiki · 2016-12-17 14:22:05 +08:00 · 14696 次点击
    这是一个创建于 2902 天前的主题,其中的信息可能已经有所发展或是发生改变。
    <div id="app" class="num">
    	{{number}}
    	<br>
    	<button class="btn" v-on:keyup.space="rand" v-on:click="rand">随机</button>
    </div>
    
    var app = new Vue ({
    	el:'#app',
    	data:{
    		number:'扔个数字吧,谁最小谁去拿外卖'
    	},
    	methods: {
    		rand:function (){
    			// 产生随机整数
    			var a = Math.random()
    			var b = a*100
    			this.number = parseInt(b)
    		}
    	}
    })
    

    点击可以正常工作;点击一次后,再按空格键也正常工作;但是直接按空格键就不会正常工作。

    请问这是什么原因导致的,解决方法有哪些?

    4 条回复    2016-12-18 00:55:35 +08:00
    ferrum
        1
    ferrum  
       2016-12-17 14:45:39 +08:00
    你把 keyup 事件绑定在按钮上面,如果焦点不在按钮上,就无法响应这个事件了。点击之后,焦点就在按钮上,所以这时按空格键有效。

    可以尝试把 keyup 事件绑定在 document 上面。
    libook
        2
    libook  
       2016-12-17 20:58:40 +08:00
    焦点不在 button 上,所以不想赢 keyup 事件,可以去查一查如何 focus 到一个元素上
    Jiki
        3
    Jiki  
    OP
       2016-12-17 22:45:14 +08:00
    @ferrum 经过一些尝试,没能实现用 vue 的方式绑定 keyup 事件到 document 上。请问可以提供具体一点的思路吗?
    ferrum
        4
    ferrum  
       2016-12-18 00:55:35 +08:00 via iPhone
    @Jiki 你这是 Vue 2.0 吧? 1.0 有个 ready 事件,就直接在里面用 addEventListener 绑定。 2.0 也有类似事件,但改名了,不记得是什么了。

    在一个 vue 组件内,想绑定事件到组件外的 HTML Element ,好像就只有这种方法。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1041 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 19:59 · PVG 03:59 · LAX 11:59 · JFK 14:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.