<body>
<div>Sample div</div>
<input type='text'/>
</body>
$(document).delegate('body *:not(input)', 'keyup', function(e){
if((e.keyCode || e.which) == 39){ //right arrow
$('#next_image').click();
}
if((e.keyCode || e.which) == 37){ //left arrow
$('#prev_image').click();
}
}
我正在使用jQuery Cycle库来设置幻灯片。它更像是一个相册,你可以使用键盘快捷键来做一些事情。因此,幻灯片显示是整个页面,其中还包含输入字段。因此,当您在输入字段内写入文本并尝试使用键盘(左箭头和右箭头按钮)移动光标时,它将触发事件并滚动到下一个/上一个图像。
关于如何在输入字段上启用所有内容的键盘事件的任何想法?显然,当前选择器不起作用。
答案 0 :(得分:3)
如果您想坚持使用.delegate()
而不是当前受欢迎的.on()
:
$(document).delegate(':not(input)', 'keyup', function (e)
{
if (e.which === 39) $('#next_image').click();
else if (e.which === 37) $('#prev_image').click();
});
event.which
如果您确实需要检查keyCode
和which
,(e.keyCode || e.which) == 39
将无法正常工作,因为||
将评估为第一个真正的操作数,或者第二个操作数,如果两个都是假的。换句话说:你必须分别检查每一个,如下所示:
if (e.which === 39 || e.keyCode === 39)
===
代替==
。请参阅Which equals operator (== vs ===) should be used in JavaScript comparisons? 不起作用......它仍然在
中触发了keyup事件<input>
啊,是的。我在想这是因为事件冒泡。
我看到它使用额外的事件处理程序解决了(gallery中的imgur标题框):
$('input').live('keyup', function (e) {
if(!e.ctrlKey && !e.altKey && !e.metaKey) {
if(e.keyCode==37 || e.keyCode==39 || e.keyCode==13) {
e.stopPropagation();
}
}
return true;
});