我有这个脚本,当按下键盘上的"N"和"P"键时,它会触发滚动到next/prev.我的问题是当用户以任何形式(例如搜索字段,登录字段等)正常输入这些字母时,如何阻止这种情况发生,因为当我在表格中按n例如John时,它不会写N而是触发滚动功能.如何解决这种行为?
我的代码如下:
$(document).keydown(function (evt) {
if (evt.keyCode == 78) {
evt.preventDefault();
scrollToNew();
} else if (evt.keyCode == 80) {
evt.preventDefault();
scrollToLast();
}
});
Run Code Online (Sandbox Code Playgroud)
谢谢.
事件对象有一个target属性,告诉您事件实际发生的位置(之后它会冒泡到文档级处理程序).因此,您可以测试evt.target表单字段元素,如果匹配,则不要执行您的特殊逻辑.
可能最简单的方法是使用closest,例如:
$(document).keydown(function (evt) {
if (!$(evt.target).closest('input, select, textarea')[0]) {
if (evt.keyCode == 78) {
evt.preventDefault();
scrollToNew();
} else if (evt.keyCode == 80) {
evt.preventDefault();
scrollToLast();
}
}
});
Run Code Online (Sandbox Code Playgroud)
在那里,我问的是最接近的表单字段是从元素开始的(因为closest从你给它的元素开始)并通过祖先进行处理.如果有非,则返回的jQuery对象将为空,[0]并将返回undefined.如此以来!undefined就是true,我们会处理你的逻辑,当没有在表单字段.
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |