我正在编写一个javascript应用程序。我使用了像
这样的东西document.keypress = function(e) {
switch(e.which){
case 97:
alert('foobar');
break;
.......
它工作正常!现在,在html页面的某个地方,我有一个textarea,现在,每当我输入a
(即ASCII 97),然后它alert
(显然)。
问题是如何防止这种情况?我的按键事件是否适用于除textareas和文本字段之外的所有内容?
答案 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();
});
当您在文本框内单击时,将不会显示警报。当您单击文档中的任何其他位置时,将显示警报。
答案 3 :(得分:1)
我可以看到两种可能的方法:
将onfocus / onblur处理程序添加到文本输入中,以清除/设置document.keypress。
在处理程序中,获取当前关注的元素
How do I find out which DOM element has the focus?
然后使用.tagName和.type属性来确定它是否是文本输入。
答案 4 :(得分:0)
您可以使用jQuery的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/
我希望它有所帮助。