html标签失去焦点事件
时间: 2025-07-04 17:14:40 浏览: 5
在HTML中,**失去焦点事件**(即元素失去焦点时触发)可以通过以下方式实现,结合原生JavaScript或框架(如jQuery)的事件监听。以下是详细说明和示例:
---
### 原生JavaScript实现
使用 `onblur` 属性或 `addEventListener`:
#### 方法1:HTML属性 `onblur`
```html
<input type="text" onblur="handleBlur()" placeholder="输入后点击外部失去焦点">
<script>
function handleBlur() {
console.log("输入框失去焦点!");
}
</script>
```
#### 方法2:`addEventListener`
```html
<input type="text" id="myInput" placeholder="输入后点击外部失去焦点">
<script>
document.getElementById("myInput").addEventListener("blur", function() {
console.log("失去焦点,当前值:" + this.value);
});
</script>
```
---
### jQuery实现
使用 `.blur()` 或 `.on('blur')`(参考之前回答的[jQuery失去焦点事件](#jQuery失去焦点事件))。
---
### 关键点说明
1. **适用元素**
`blur` 事件适用于可聚焦的元素,如 `<input>`、`<select>`、`<textarea>`、`<a>`(带 `tabindex` 属性)等。
2. **与 `focusout` 的区别**
- `blur` 不冒泡(事件不会传递到父元素)。
- `focusout` 会冒泡。例如:
```html
<div id="parent">
<input type="text" id="child">
</div>
<script>
// blur 不会触发父元素事件
document.getElementById("child").addEventListener("blur", () => console.log("child blur"));
// focusout 会冒泡到父元素
document.getElementById("parent").addEventListener("focusout", () => console.log("parent focusout"));
</script>
```
3. **动态元素绑定**
动态生成的元素需通过**事件委托**绑定:
```javascript
document.addEventListener("blur", function(event) {
if (event.target.matches(".dynamic-input")) {
console.log("动态输入框失去焦点");
}
}, true); // 注意:blur不冒泡,需改用focusout或捕获阶段
```
4. **手动触发失去焦点**
```javascript
document.getElementById("myInput").blur(); // 原生JS
$("#myInput").trigger("blur"); // jQuery
```
---
### 完整示例
```html
<!DOCTYPE html>
<html>
<head>
<title>失去焦点事件示例</title>
</head>
<body>
<input type="text" id="input1" placeholder="原生JS blur事件" onblur="alert('失去焦点!')">
<input type="text" id="input2" placeholder="原生JS addEventListener">
<div id="container">
<input type="text" class="dynamic-input" placeholder="动态生成的输入框">
</div>
<script>
// 原生JS绑定
document.getElementById("input2").addEventListener("blur", function() {
console.log("input2失去焦点,值为:" + this.value);
});
// 动态元素事件委托(需用focusout或捕获阶段)
document.addEventListener("focusout", function(event) {
if (event.target.classList.contains("dynamic-input")) {
console.log("动态输入框失去焦点,值为:" + event.target.value);
}
}, true); // 捕获阶段
</script>
</body>
</html>
```
---
### 常见问题
1. **为什么动态生成的元素无法触发 `blur` 事件?**
需使用**事件委托**,并注意 `blur` 不冒泡,可改用 `focusout` 或在捕获阶段监听。
2. **如何阻止失去焦点?**
原生JS中调用 `event.preventDefault()` 无效,但可通过重新聚焦元素模拟:
```javascript
element.addEventListener("blur", function(event) {
if (shouldNotLoseFocus) {
event.target.focus(); // 强制重新聚焦
}
});
```
3. **`blur` 和 `change` 事件的区别?**
- `blur`:元素失去焦点时触发(无论值是否变化)。
- `change`:元素失去焦点且值发生变化时触发。
---
阅读全文
相关推荐


















