javascript keydown快捷键功能但在文本框中忽略

时间:2015-01-21 08:35:31

标签: javascript

我设置了一键跳过/更改页面功能。 但是当用户想要在输入文本或文本区域中键入“0”时,一键功能也会生效并更改为另一页。

当用户使用文本输入或文本区域时,如何忽略此java脚本?

document.onkeydown=nextpage; 
function nextpage(){
  var event=document.all?window.event:arguments[0]; 
  if (event.keyCode==13) location="#skipcontent"; 
  if (event.keyCode==48) location="contact-us.php";
} 

1 个答案:

答案 0 :(得分:2)

检查target元素以查看事件定位的元素:

document.onkeydown=nextpage; 
function nextpage(e){
  var event = document.all ? window.event : e;
  switch (e.target.tagName.toLowerCase()) {
    case "input":
    case "textarea":
    case "select":
    case "button":
    // ...and so on for other elements you want to exclude;
    // list of current elements here: http://www.w3.org/TR/html5/index.html#elements-1
      break;
    default:
      if (event.keyCode==13) location="#skipcontent"; 
      if (event.keyCode==48) location="contact-us.php";
      break;
  }
}

或者代替switch,您可以使用带有替换的正则表达式:

document.onkeydown=nextpage; 
function nextpage(e){
  var event = document.all ? window.event : e;
  if (!/^(?:input|textarea|select|button)$/i.test(e.target.tagName)) {
    if (event.keyCode==13) location="#skipcontent"; 
    if (event.keyCode==48) location="contact-us.php";
  }
}

附注:您可能会考虑使用addEventListener,这在所有现代浏览器上都受支持,并允许每个元素的每个事件有多个处理程序。如果你必须支持IE8,this answer有一个你可以使用的函数,它可以回退到attachEvent并为你处理事件对象shuffle。