Javascript 检查焦点是否在文本字段上

Javascript 检查焦点是否在文本字段上,javascript,Javascript,我用箭头让人们在我的网站上四处走动。当您试图在表单字段中写入时,我不希望此功能存在。如何检查其中一个文本字段是否聚焦?我认为,如果聚焦在文本框中,默认情况下,web浏览器将禁用使用箭头键在页面上移动。不需要额外的代码。若要判断某个文本字段是否已聚焦,请将onfocus和onblur处理程序添加到要查看的文本字段中,并在onfocus处理程序中处理状态更改。比如说, <script> var textFieldInFocus; function handleOnFocus(form_e

我用箭头让人们在我的网站上四处走动。当您试图在表单字段中写入时,我不希望此功能存在。如何检查其中一个文本字段是否聚焦?

我认为,如果聚焦在文本框中,默认情况下,web浏览器将禁用使用箭头键在页面上移动。不需要额外的代码。

若要判断某个文本字段是否已聚焦,请将
onfocus
onblur
处理程序添加到要查看的文本字段中,并在onfocus处理程序中处理状态更改。比如说,

<script>
var textFieldInFocus;
function handleOnFocus(form_element)
{
   textFieldInFocus = form_element;
}
function handleOnBlur()
{
   textFieldInFocus = null;
}
</script>
<form>
  <input type="text" name="text1" onfocus="handleOnFocus(this)" onblur="handleOnBlur()"/>
  <input type="text" name="text2"/>
  <textarea name="textarea1" onfocus="handleOnFocus(this)" onblur="handleOnBlur()"></textarea>
</form>
if(textFieldInFocus)
{
    alert("The textField that was currently focused is " + textFieldInFocus);
}
添加onfocus和onblur处理程序的一种较短、更简单的方法是使用jQuery,但由于没有提及,所以我编写了一个小而简单的实现


另外,更改键盘和鼠标事件的默认行为时要小心,因为您可能会妨碍依赖于您自己可能无法测试的行为的可访问性设备。

捕获您在文档/正文级别使用的任何键盘事件,然后使用事件的target属性确定事件是否应用于textarea或input(或任何其他要排除的控件),并仅在适当时执行站点导航操作

我已经有一段时间没有尝试编写关注事件属性的事件处理代码了,而没有使用JQuery来实现所有跨浏览器兼容性,因此下面的内容可能有点错误,但应该给您足够的时间来解决其余的问题。谷歌是你的朋友。(但我强烈建议使用一个库(JQuery或其他)来规范各种浏览器的事件处理。)无论如何,从内存IE的事件属性使用
srcmelement
,其他使用
target
(?)来为您提供事件应用到的元素的引用。因此,尽管如此,我还是建议如下:

<body onkeyup="return someHandler();">

<script>

function someHandler(e) {
  if (!e)
    e = window.event;
  var elTarget = e.target ? e.target : e.srcElement;
  var elType = elTarget.tagName;
  if (elType != "textarea"
     && elType != "input"
     // && elType != "etc") {

     // do something

  }
}

</script>

函数someHandler(e){
如果(!e)
e=窗口事件;
var-elTarget=e.target?e.target:e.src元素;
var elType=elTarget.tagName;
如果(elType!=“textarea”
&&elType!=“输入”
//&&elType!=“等”){
//做点什么
}
}

我使用
document.activeElement.tagName
获取具有焦点的元素的
标记名
,它将返回为“TEXTAREA”、“INPUT”等


据我所知和测试,它适用于所有现代浏览器。

没错!在下面的回答文本区域框中尝试:将光标设置到其中,然后用箭头键再次尝试将其移出。它不起作用@powtac箭头键的默认功能不起作用(移动页面),但OP正在实现自定义功能,即使文本区域被聚焦,该功能仍将执行。@powtac Original poster。问这个问题的人。@powtac-OP是原创帖子(er)。但我同意你的观点,从给出的简短描述来看,默认浏览器功能似乎可以做到这一点——至少在IE和其他一些应用程序中是这样,注意到Opera有自己古怪的键盘方案。所以“OP”又名@Jocke应该将此作为一个问题提问,并发布一些代码。。。我也这么认为了…这不是个好主意。默认行为是使用tab键导航,然后使用光标键在控件内导航。如果你改变这种行为,你只会让用户的生活更加困难。使用javascript重新编写UI不是一个好主意。如果您想了解使用模糊和焦点事件跟踪哪个元素具有焦点的问题,请尝试使用quirksmode。谢谢!正如您所提到的,我设置了一个jquery替代品。