如何在textarea停用按键事件

时间:2013-08-12 08:14:59

标签: javascript html

我正在编写一个javascript应用程序。我使用了像

这样的东西
document.keypress = function(e) {
    switch(e.which){ 
    case 97: 
    alert('foobar');
    break;
    .......

它工作正常!现在,在html页面的某个地方,我有一个textarea,现在,每当我输入a(即ASCII 97),然后它alert(显然)。

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

6 个答案:

答案 0 :(得分:4)

您可以使用target属性来标识触发事件的元素。 然后,使用tagName找出元素类型。

您可以使用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;
    .......

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

我认为你要找的是jQuery的stopPropagation方法。

来自文档 -

  

阻止事件冒泡DOM树,防止任何事件   家长处理人员被告知该事件。

$(':input').on('keypress', function(e) {
      e.stopPropagation();
});

Working fiddle

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

答案 3 :(得分:1)

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

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

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

  3. How do I find out which DOM element has the focus?

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

答案 4 :(得分:0)

您可以使用jQuery的keyPress方法。

http://api.jquery.com/keypress/

这里有如何使用它:

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

答案 5 :(得分:0)

尝试以下:

$(document).on("keypress",function(e){
    switch(e.which){ 
      case 97: 
       alert('foobar');
       break;
    }
});

$('textarea,input[type="text"]').on("keypress",function(e){
   e.stopPropagation();
});

这里是小提琴:http://jsfiddle.net/m7ghb/

我希望它有所帮助。