Javascript 捕获并删除表单中未聚焦的密钥

Javascript 捕获并删除表单中未聚焦的密钥,javascript,jquery,forms,keydown,Javascript,Jquery,Forms,Keydown,我有一个使用SVG绘制点的web应用程序,我想通过按delete键添加删除选定点的功能。我可以捕获整个文档的delete keydown(或up)并阻止默认事件(Chrome的默认行为是返回页面),但是这显然会阻止所有delete事件,因此delete按钮不再在表单中工作 有没有一种方法可以设置它,使delete键在表单/输入中按预期工作,但在应用程序中的任何其他地方它都可以用作自定义删除功能?我想到的第一件事是在输入和文本区域字段上停止播放,然后,不应在文档上触发preventDefault

我有一个使用SVG绘制点的web应用程序,我想通过按delete键添加删除选定点的功能。我可以捕获整个文档的delete keydown(或up)并阻止默认事件(Chrome的默认行为是返回页面),但是这显然会阻止所有delete事件,因此delete按钮不再在表单中工作


有没有一种方法可以设置它,使delete键在表单/输入中按预期工作,但在应用程序中的任何其他地方它都可以用作自定义删除功能?

我想到的第一件事是在
输入
文本区域
字段上停止播放,然后,不应在
文档
上触发
preventDefault

JQuery伪代码:

$('input, textarea').keypress(e, function(e){e.stopPropagation();});
$(document).keypress(e, function(e){if(delete) e.preventDefault();});
另一种可能性是在文档的关键事件上检查原始目标

事件回调:

var originalElement = e.srcElement || e.originalTarget;
if(orignalElement.tagName === 'INPUT' or orignalElement.tagName === 'TEXTAREA'){ return; }
// else do your delete key stuff

如果您使用的是jQuery,那么第一行应该是过时的,因为它为您规范化了事件,您可以使用
e.target
获取
原始目标
我想到的第一件事是在
输入
文本区域
字段上停止播放,然后,不应在
文档
上触发
preventDefault

JQuery伪代码:

$('input, textarea').keypress(e, function(e){e.stopPropagation();});
$(document).keypress(e, function(e){if(delete) e.preventDefault();});
另一种可能性是在文档的关键事件上检查原始目标

事件回调:

var originalElement = e.srcElement || e.originalTarget;
if(orignalElement.tagName === 'INPUT' or orignalElement.tagName === 'TEXTAREA'){ return; }
// else do your delete key stuff

如果您使用的是jQuery,那么第一行应该是过时的,因为它为您规范化了事件,您可以使用
e.target
获取
originalTarget

我首选的方法如下:

$(window).keyup(function(e) {
  if(e.keyCode == 46 && $("input:focus, textarea:focus").length == 0) {
    e.preventDefault();
    alert("delete key pressed!");
  }
});

但是,我不确定您是否能够覆盖后退按钮的行为-鉴于存在滥用的可能性,Chrome似乎不太可能允许这样做。

我更喜欢的方法是这样的:

$(window).keyup(function(e) {
  if(e.keyCode == 46 && $("input:focus, textarea:focus").length == 0) {
    e.preventDefault();
    alert("delete key pressed!");
  }
});
然而,我不确定你是否能够覆盖后退按钮的行为——考虑到可能被滥用,Chrome似乎不太可能允许这样做