解释jQuery中的blur()和focus()事件

8 阅读1分钟
# jQuery中的blur()和focus()事件详解

## 基本概念

`blur()``focus()`是jQuery中处理表单元素焦点状态的两个核心事件方法。

### focus()事件
当元素获得焦点时触发,通常发生在:
- 用户点击输入框
- 通过Tab键导航到元素
- 使用`.focus()`方法以编程方式触发

```javascript
$("#username").focus(function() {
  $(this).css("border-color", "blue");
});

blur()事件

当元素失去焦点时触发,常见场景:

  • 用户点击页面其他位置
  • 通过Tab键离开当前元素
  • 调用.blur()方法
$("#username").blur(function() {
  if($(this).val() === "") {
    $(this).css("border-color", "red");
  }
});

实际应用示例

表单验证

$("input[type='text']").focus(function() {
  $(this).removeClass("error");
}).blur(function() {
  if($(this).val().length < 3) {
    $(this).addClass("error");
  }
});

动态提示

$("#search").focus(function() {
  $("#search-hint").show();
}).blur(function() {
  $("#search-hint").hide();
});

链式调用

$("#email")
  .focus(function() { /* 焦点处理 */ })
  .blur(function() { /* 失焦处理 */ });

注意事项

  1. 事件冒泡:这些事件不会冒泡,如需捕获需使用focusin/focusout
  2. 移动端兼容:在移动设备上表现可能不一致
  3. 性能考虑:避免在事件处理函数中执行复杂操作
  4. 动态元素:对动态创建的元素需要使用事件委托

高级用法

事件委托

$(document).on("focus", ".dynamic-input", function() {
  // 处理逻辑
});

组合使用

$("input").focus(function() {
  $(this).next(".hint").fadeIn();
}).blur(function() {
  $(this).next(".hint").fadeOut();
});

最佳实践

  1. 保持事件处理函数简洁
  2. 考虑使用event.target而非this
  3. 对于复杂表单,考虑统一管理焦点状态
  4. 在移除元素前解绑事件

替代方案

现代开发中可以考虑:

  • 原生JavaScript的addEventListener
  • Vue/React等框架的v-model/onChange
  • CSS的:focus伪类

总结

blur()focus()是处理用户交互的基础事件,合理使用可以:

  • 增强表单体验
  • 提供即时反馈
  • 实现无障碍访问
  • 优化用户流程

掌握这些事件的使用是前端开发的基本功,建议在实际项目中多加练习。