jquery - 如何阻止 keydown 事件干扰表单字段?

标签 jquery keypress keydown

我已经绑定(bind)了一些事件,使其在按下左右箭头键时发生,如下所示:

$(document).keydown(function(e) {
    switch(e.which) {
        case 39: $("#next").trigger('click');
        break;

        case 37: $("#prev").trigger('click');
        break;              
    }
});

但是,显然,如果您在表单中并按左右键在文本中移动,则会触发这些事件。

如何更改此设置以避免发生这种情况?

最佳答案

您可以检查事件的目标( more information here )

$(document).keydown(function(e) {
    //var target = (e.target) ? e.target : e.srcElement; // IE uses srcElement
    // jQuery seems to handle this, so e.target should be fine

    if(e.target.nodeName != 'INPUT') {
        switch(e.which) {
            case 39: $("#next").trigger('click');
            break;

            case 37: $("#prev").trigger('click');
            break;              
        }
    }
});

或者您可以通过将事件处理程序附加到输入元素来防止事件冒泡:

$('input').keydown(function(e) {
    e.stopPropagation();
});

更新:

同样,您可能想测试 TEXTAREA 的节点名称。

这是一个示例:http://jsfiddle.net/86CKw/1/

关于jquery - 如何阻止 keydown 事件干扰表单字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3415172/

相关文章:

javascript - 使用js动态添加div到html

javascript - 角色跳跃脚本javascript平台游戏

javascript - 按住某个键的同时删除 'idle time'

javascript - 使用 FullPageJS 的 scrollOverflow 无法处理点击事件

jquery - 根据另一个 radio 设置 radio

javascript - AJAX+Rails 点击处理程序未绑定(bind)

c# - 控制台窗口颜色、KeyUp、KeyDown 和 KeyPress 事件

c# - 按下回车键时调用特定按钮的onClick事件C#

c - 返回按下的键而不输入确认

javascript - 发生 'mouseout' 时无法删除 EventListener