JavaScript键盘按键事件防止默认行为

17

我有以下代码:

$(document).on('keyup', 'p[contenteditable="true"]', function(e) {
    if(e.which == 13) {
        e.preventDefault();
        $(this).after('<p contenteditable = "true"></p>');
        $(this).next('p').focus();
    } else if((e.which == 8 || e.which == 46) && $(this).text() == "") {
        e.preventDefault();
        alert("Should remove element.");
        $(this).remove();
        $(this).previous('p').focus();
    };
});

当按键被按下时,我希望阻止默认操作。 preventDefault 可以用于 keypress,但不适用于 keyup。是否有一种方法可以防止 $(document).on('keyup') 的默认操作?

2个回答

48

在默认事件之后,keyup 会被触发。

keydownkeypress 是可以阻止默认事件的位置。
如果它们没有被阻止,那么默认事件会发生并触发 keyup


有人知道可以支持这个观点的参考资料吗? - tutuDajuju
@tutuDajuju 我认为很清楚,即使没有参考也可以理解。如果你钩入 keyup,那么你就不能再“拦截”实际的按键操作了,因为它已经被 keydown 处理过了。 - Sahbi

8
我们可以使用以下代码片段来防止此操作。
e.stopPropagation();
      e.preventDefault();  
      e.returnValue = false;
      e.cancelBubble = true;
      return false;

keyup事件在keydown/keypress事件之后触发,我们可以在任何一个事件中阻止默认操作。

谢谢,

Siva


3
这不是被问问题的正确答案,否则我会点赞的;但是我非常感谢你提供这个有用的信息所付出的努力。 - Nikunj Bhatt
不要使用 keyup,而是使用 keydown 并添加他的答案。 - Anthony Kal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接