Javascript 如何在textarea停用按键事件

Javascript 如何在textarea停用按键事件,javascript,html,Javascript,Html,我正在编写一个javascript应用程序。我用了类似 document.keypress = function(e) { switch(e.which){ case 97: alert('foobar'); break; ....... 而且效果很好!现在,在html页面的某个地方,我有一个文本区域,现在,每当我键入a(即ASCII 97),它就会发出alert(显然) 问题是我如何防止这种情况?“我的按键事件”适用于除文本区域和文本字段之外的所有

我正在编写一个javascript应用程序。我用了类似

document.keypress = function(e) {
    switch(e.which){ 
    case 97: 
    alert('foobar');
    break;
    .......
而且效果很好!现在,在html页面的某个地方,我有一个文本区域,现在,每当我键入
a
(即ASCII 97),它就会发出
alert
(显然)


问题是我如何防止这种情况?“我的按键事件”适用于除文本区域和文本字段之外的所有内容?

您可以使用
target
属性来标识触发事件的元素。 然后,使用标记名
计算元素类型

您可以使用其他属性,如
type
,来确定它是否为文本字段

document.keypress = function(e) {
var target = e.target;
var elementType = target.tagName.toLowerCase();
if (elementType != "textarea" && !(elementType =="input" && target.type =="text")) {
    switch(e.which){ 
    case 97: 
    alert('foobar');
    break;
    .......

您可以指定要向其中添加事件侦听器的元素,例如:

document.getElementById('text-field').keypress = function (e) {
    var code = e.keyCode || e.which;
    switch (code) {
        case 97:
            alert('foobar');
            break;
        ....
    } 
}

您可以使用jQuery的
keyPress
方法

以下是如何使用它:

$("#target").keypress(function(e) {
  e.preventDefault();
});

我认为您需要的是jQuery的方法

从文件中-

防止事件在DOM树中冒泡,防止任何 父处理程序不会收到事件通知


当您在文本框内单击时,警报将不会显示。单击文档中的其他位置时,将显示警报。

我可以看到两种可能的方法:

  • 将onfocus/onblur处理程序添加到文本输入中,以清除/设置document.keypress

  • 在处理程序中,获取当前关注的元素

  • 然后使用.tagName和.type属性确定它是否为文本输入

    尝试以下操作:

    $(document).on("keypress",function(e){
        switch(e.which){ 
          case 97: 
           alert('foobar');
           break;
        }
    });
    
    $('textarea,input[type="text"]').on("keypress",function(e){
       e.stopPropagation();
    });
    
    这是小提琴:


    我希望这能有所帮助。

    如果我错了,请纠正我-您希望警报仅在您在文本框中键入“a”时显示?不,他希望仅在未键入textarea、textfields时显示警报…使用
    e.preventDefault()
    在文本区域的
    按键事件中使用,或textfield@RaoulGeorge:我希望仅当我在窗口的任何位置键入“a”时,警报才会显示,但当文本区域聚焦时,我不想显示它@ZZllalani:很抱歉,这没用。上面说他在使用文本区。嘿嘿<代码>输入
    ?嘿嘿
    $(document).on("keypress",function(e){
        switch(e.which){ 
          case 97: 
           alert('foobar');
           break;
        }
    });
    
    $('textarea,input[type="text"]').on("keypress",function(e){
       e.stopPropagation();
    });