`
kokorodo
  • 浏览: 38863 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

javascript:让元素获得焦点(表单元素与链接之外的元素)

 
阅读更多
javascript:让元素获得焦点(表单元素与链接之外的元素)
一般而言,只有表单元素与链接才能使用focus与blur事件,因此jQuery对于许多元素就歇菜了。但只要为元素节点设置一个tabindex属性,非表单元素也可能使用这两种事件。
但默认能使用焦点事件的元素一般也支持tabindex事件。为什么这么说呢?因为实质上,默认支持焦点事件的元素并不只这些,IE还默认body, frame, iframe, img, isIndex, object具有获取失去焦点的能力。对于其他标准浏览器,它们之间还可能存在差异。因此我们不能单纯地通过排除法,为非焦点元素添加tabindex属性。而是转而用一种更好的方法,通过检测当前元素是否已经(显式地或隐式地)设置了该属性,才做进一步的操作。如下是检测函数:
var hasAttr = function(el, name){
  var attr = el.getAttributeNode && el.getAttributeNode(name);
  return attr ? attr.specified : false
}
如果返回值为false,我们就为该元素设置tabindex属性。对于tabindex属性,w3c对此也作出相应现范。如果tabindex为负数,那么元素就不能使用tab键进行导航,但还能获得焦点。如果位于 0 到 32767之间,则可以根据tabindex的值进行导航。如果当几个元素的tabindex同为零时,则以文档流的顺序执行导航。更多与tabindex相关的资料,可以参看我的另一篇文章。
通过上面的分析,无疑为tabindex最安全,这样就不会破坏原有的tab导航系统。顺便一提,获得焦点后,元素有一个虚线框,总有人挖空心思把它去掉。其实这无疑是对页面易用性的践踏,我们还要考虑一下某些特殊人群的需要,如不用鼠标的高手,鼠标坏了的可怜人或是视力有缺陷的人群。有文章介绍,去掉虚线框在美国是违法的,这是对视力障碍者的一种歧视!
下面给出完整的程序:
var hasAttr = function(el, name){
  var attr = el.getAttributeNode && el.getAttributeNode(name);
  return attr ? attr.specified : false
}
var addEvent = function(obj,type,callback){
  if ( obj.addEventListener ) {
    obj.addEventListener( type, callback, false );
  } else if ( obj.attachEvent ) {
    obj.attachEvent( "on" + type, callback );
  }
}
var focus = function(el,fn){
  if(!hasAttr(el,"tabindex"))
    el.tabIndex = -1;
  addEvent(el,"focus",function(e){
    fn.call(el,(e || window.event));
  });
}
分享到:
评论

相关推荐

    javascript事件汇总

    - **触发时机**:当表单元素获得焦点时触发。 - **应用场景**:高亮显示当前输入框。 4. **`onreset`**: - **触发时机**:当表单中的“重置”按钮被点击时触发。 - **应用场景**:清空表单内容。 5. **`...

    javascript事件触发列表与解说.pdf

    - **触发条件**:元素获得焦点事件,当表单中的元素获得焦点(如通过点击或Tab键)时触发。 - **描述**:用于高亮显示、输入辅助等。 - **兼容性**:HTML 2/3/3.2/4版本,IE3、Netscape 2、Opera 3及以上浏览器...

    CSS伪类全解析:深入探索选择器的隐藏力量

    4. **`:focus-within`**:当元素或其子元素获得焦点时。例如: ```css .form-group:focus-within { border: 1px solid green; } ``` 这段代码会使得包含输入框的表单组在其内部的输入框获得焦点时边框变为绿色...

    javascript实现自动填写表单实例简析

    使用`.focus()`方法可以让某个元素获得焦点,从而可以接收用户的输入。 再者,该知识点中提到了如何将编写好的JavaScript脚本保存在浏览器的收藏夹(书签)中。在现代浏览器中,如Chrome、Firefox等,可以通过创建...

    javascript js 鼠标事件 大全,js鼠标拖动事件,js鼠标移动事件.docx

    - **描述**:当表单元素失去焦点且值发生变化时触发。 - **用途**:自动保存用户输入的变化。 ##### 3. `onFocus` - **描述**:当元素获得焦点时触发。 - **用途**:高亮显示表单字段、提供帮助信息等。 ##### 4. ...

    JavaScript入门相关知识网络整理

    - `onfocus`、`onblur`和`onchange`:与表单元素的焦点和改变有关。 - `onsubmit`:在提交表单之前触发,常用于表单验证。 - `onmouseover`和`onmouseout`:鼠标悬停和离开元素时触发。 #### 六、DOM操作与浏览器...

    很好的Javascript实例

    - **定义**:`onFocus` 事件发生在元素获得焦点时。 - **用途**:通常用于提供用户输入提示或清除默认值。 - **示例**: ```html (value == 'mm') { value = '' }"> ``` 此示例表示当文本框获得焦点时,如果其值...

    jQuery详细教程

    $(selector).focus(function) 触发或将函数绑定到被选元素的获得焦点事件 $(selector).mouseover(function) 触发或将函数绑定到被选元素的鼠标悬停事件 四. jQuery实例 jQuery hide() 演示简单的 jQuery hide() ...

    jQuery表单事件实例代码分享

    代码中使用了`.focusin()`方法,这个方法用来捕捉元素获得焦点的事件,比如`<input>`标签元素。当用户名输入框获得焦点时,会触发一个函数,该函数的作用是为当前获得焦点的元素添加一个`input_focus`类。这个类是...

    Focus

    当用户通过键盘、鼠标或其他输入设备选择一个元素(如按钮、链接或表单字段)时,该元素就会获得焦点。这使得用户可以通过Tab键在不同的可聚焦元素之间导航,而不必使用鼠标。这种功能对于无障碍性至关重要,尤其是...

    JS鼠标键盘触发函数大全

    - **`onFocus`**:当某个表单元素获得焦点时触发。 - **兼容性**:IE3 | N2 | O3 - **`onReset`**:当表单的重置按钮被点击时触发。 - **兼容性**:IE4 | N3 | O3 - **`onSubmit`**:当表单提交时触发。 - **兼容...

    js鼠标事件

    - **描述**:当表单元素失去焦点且内容发生变化时触发。 - **用途**:适用于实时检查表单输入是否符合预期。 ##### 3. `onSubmit` - **描述**:当表单提交时触发。 - **用途**:可以在提交之前进行最后的验证或处理...

    html5的使用

    - **`validity`**:检查表单元素的有效状态。 这些新验证机制提高了数据的准确性,减少了服务器端的负担。 #### 三、多媒体支持 ##### 1. 视频处理——`<video>` - **`<video>`**:用于嵌入视频内容。 - **`...

    深入浅析border和outline区别

    当元素获得焦点(例如,通过 Tab 键切换)时,浏览器通常会自动显示 `outline`,以突出显示当前选中的元素。相反,当元素失去焦点时,`outline` 会消失。这种行为是浏览器内置的,不需要额外的 JavaScript 或 CSS ...

    google-homepage

    2. `<form>`:用于创建表单,这里的表单是搜索功能,包含`<input>`元素作为搜索框和`<button>`元素作为提交按钮。 3. `<nav>`:导航元素,虽然Google主页没有明显的导航链接,但可以用于组织页面布局。 4. `<footer>...

    jQuery实现验证表单密码一致性及正则表达式验证邮箱、手机号的方法

    最后,文章提供了更多关于jQuery的内容链接,包括jQuery正则表达式用法、字符串操作技巧、XML操作技巧、扩展技巧以及选择器使用等专题,这些链接指向的内容可以让开发者深入学习和掌握jQuery的更多高级功能和用法,...

    Login-Page-1:登录页面的暗光UI主题

    6. **过渡和动画**:CSS的transition和animation属性可以增加用户体验,如输入框获得焦点时的边框变化,或者点击按钮时的反馈动画。 7. **表单验证**:通过CSS和JavaScript实现表单验证,如检查用户名和密码是否为...

    XML高级编程

    虽然有越来越多的XML社团在不断涌现并提出崭新的超出W3C控制之外的与XML相关的想法,但W3C对于XML的开发来说,仍然是非常重要并处于中心地位的。本书的焦点集中在如何使XML与现实生活中的应用结合在一起。它展示了很...

Global site tag (gtag.js) - Google Analytics