Suz*_*sen 8 html javascript jquery keydown preventdefault
我一直在做一些需要我使用空格键来触发事件的东西.我一直在努力的事情要复杂得多,但我把它简化为基础知识,作为我需要做的事情的一个例子.
这个想法是,当空格键被按下时,它会突出显示这个div,当它被放开时它会突出显示.我有一个问题,当我按下空格时,默认是让滚动条分阶段跳下来.为了解决这个问题,我尝试添加防止默认值,然后最终使用return false.
这很棒......直到我意识到当我在输入字段文本框中进行测试时,我已经取消了在打字时放置空间的能力.
我认为我需要的是:
真的不知道该怎么做.
这是我在这个例子中使用的代码:
HTML
<div class="container">
<div class="moo">I am moo</div>
<input/>
</div>
Run Code Online (Sandbox Code Playgroud)
CSS:
.container {
height:9000px;
}
.moo {
border:1px solid black
}
.red {
background:red;
}
input {
margin-top:30px;
}
Run Code Online (Sandbox Code Playgroud)
脚本:
$(document).keydown(function(e) {
if(e.keyCode === 32) {
$('.moo').addClass('red');
//event.preventDefault();
//event.stopPropagation();
return false;
}
else {
$('.moo').removeClass('moo');
}
});
$(document).keyup(function(e) {
if(e.keyCode === 32) {
$('.moo').removeClass('red');
event.stopPropagation();
}
});
Run Code Online (Sandbox Code Playgroud)
捕获keypress的事件,而不是和toggleClass red你可以检查对象的商品是否body或input element使用e.target.nodeName
$(document).keypress(function(e) {
if(e.keyCode === 32 && e.target.nodeName=='BODY') {
$('.moo').toggleClass('red');
event.preventDefault(); //prevent default if it is body
}
});
Run Code Online (Sandbox Code Playgroud)
或者,如果您想要保持闪烁,keyup并keydown保持两个事件如下:
$(document).keydown(function(e) {
if(e.keyCode === 32 && e.target.nodeName=='BODY') {
$('.moo').toggleClass('red');
event.preventDefault();
}
});
$(document).keyup(function(e) {
if(e.keyCode === 32 && e.target.nodeName=='BODY') {
$('.moo').toggleClass('red');
event.preventDefault();
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7469 次 |
| 最近记录: |