我用这段代码在鼠标悬停在某个元素上并按下shift键时切换背景。如果我在输入该元素之前按住shift键,它就可以工作,但如果我已经在该元素上并按下shift键,它就不能工作。有什么想法吗?谢谢!第一个
hi3rlvi21#
div不能成为焦点(默认情况下);因此,* 它不能捕获按键 。但是,如果将keypress事件侦听器绑定到文档,则每次按下按键时都会触发该事件。请将mouseover和mouseleave绑定到div,因为它们可以通过非焦点元素触发。此外,keyboard event不同于mouse event *,因此不能在鼠标悬停时访问e的shiftKey。相反,我将使用&&操作符来测试是否同时满足这两个条件:shift键和鼠标,将shift键是否被按下保存在布尔值中,并在mouseover / mouseleave时进行检查。第一个
keypress
mouseover
mouseleave
e
shiftKey
&&
fhg3lkii2#
你可以添加一堆代码来监听鼠标的位置,也可以为keydown添加一个事件,并计算出光标在哪里...也许有更好的解决办法,但这是可行的。第一个另一种方法是设置一个活动元素,而不用担心x和y位置。第一个
v6ylcynt3#
这是一个有点草率,但它应该工作。只要设置一些var,然后检查他们每当一个事件被激发。注意:你必须在iframe中点击一次才能使它工作(这样它就可以捕获按键)。第一个
llmtgqce4#
现在说这个有点晚了,但是这里有一个非jquery的例子,它监视击键并实时地将各种shift/ctrl/alt状态添加到html classList中。CSS可以相应地响应。
备注
要在stackoverflow代码段中测试此代码,需要焦点,因为代码段在iframe中运行。当作为顶级页面运行时,默认情况下当前文档将成为焦点。首先点击“运行代码片段”,然后选择直接在它下面的iframe-点击单词“shift”,你将聚焦在iframe中然后您可以点击shift键。第一个
eulz3vhy5#
keypress doesn't capture the shift-key此[按键事件]类似于keydown事件,不同之处在于,修饰键和非打印键(如Shift、Esc和Delete)触发keydown事件,而不是按键事件。
5条答案
按热度按时间hi3rlvi21#
div不能成为焦点(默认情况下);因此,* 它不能捕获按键 。
但是,如果将
keypress
事件侦听器绑定到文档,则每次按下按键时都会触发该事件。请将mouseover
和mouseleave
绑定到div,因为它们可以通过非焦点元素触发。此外,keyboard event不同于mouse event *,因此不能在鼠标悬停时访问
e
的shiftKey
。相反,我将使用&&
操作符来测试是否同时满足这两个条件:shift键和鼠标,将shift键是否被按下保存在布尔值中,并在mouseover / mouseleave时进行检查。第一个
fhg3lkii2#
你可以添加一堆代码来监听鼠标的位置,也可以为keydown添加一个事件,并计算出光标在哪里...
也许有更好的解决办法,但这是可行的。
第一个
另一种方法是设置一个活动元素,而不用担心x和y位置。
第一个
v6ylcynt3#
这是一个有点草率,但它应该工作。只要设置一些var,然后检查他们每当一个事件被激发。
注意:你必须在iframe中点击一次才能使它工作(这样它就可以捕获按键)。
第一个
llmtgqce4#
现在说这个有点晚了,但是这里有一个非jquery的例子,它监视击键并实时地将各种shift/ctrl/alt状态添加到html classList中。
CSS可以相应地响应。
备注
要在stackoverflow代码段中测试此代码,需要焦点,因为代码段在iframe中运行。
当作为顶级页面运行时,默认情况下当前文档将成为焦点。
首先点击“运行代码片段”,然后选择直接在它下面的iframe-点击单词“shift”,你将聚焦在iframe中
然后您可以点击shift键。
第一个
eulz3vhy5#
keypress
doesn't capture the shift-key此[按键事件]类似于keydown事件,不同之处在于,修饰键和非打印键(如Shift、Esc和Delete)触发keydown事件,而不是按键事件。