在 JavaScript 中,focus 和 blur 事件是处理元素聚焦和失焦的重要工具。这些事件在表单验证、用户交互跟踪和可访问性等方面非常有用。
const input = document.querySelector('input');
// 添加 focus 事件监听
input.addEventListener('focus', function() {
console.log('输入框获得焦点');
this.style.borderColor = 'blue';
});
// 添加 blur 事件监听
input.addEventListener('blur', function() {
console.log('输入框失去焦点');
this.style.borderColor = '';
// 简单的验证示例
if(this.value.length < 3) {
this.style.borderColor = 'red';
}
});
const input = document.querySelector('input');
input.onfocus = function() {
console.log('获得焦点 - 旧式方法');
};
input.onblur = function() {
console.log('失去焦点 - 旧式方法');
};
focus() 和 blur() 方法可以主动触发元素的聚焦或失焦:
document.getElementById('myInput').focus(); // 聚焦到元素
document.getElementById('myInput').blur(); // 使元素失焦
document.activeElement获取当前获得焦点的元素:
console.log(document.activeElement); // 输出当前聚焦的元素
focus 和 blur 事件不冒泡,但可以使用 focusin 和 focusout 作为替代:
// focusin 和 focusout 会冒泡
document.addEventListener('focusin', function(event) {
console.log('有元素获得焦点:', event.target);
});
document.addEventListener('focusout', function(event) {
console.log('有元素失去焦点:', event.target);
});
const emailInput = document.getElementById('email');
emailInput.addEventListener('blur', function() {
const email = this.value;
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if(!emailRegex.test(email)) {
this.classList.add('invalid');
showError('请输入有效的电子邮件地址');
} else {
this.classList.remove('invalid');
hideError();
}
});
const searchBox = document.querySelector('.search-box');
const searchInput = searchBox.querySelector('input');
searchInput.addEventListener('focus', function() {
searchBox.classList.add('focused');
searchBox.style.width = '300px';
});
searchInput.addEventListener('blur', function() {
searchBox.classList.remove('focused');
searchBox.style.width = '200px';
});
tabindex 属性change 或 input 事件结合使用这些事件是创建交互式网页的基础,合理使用可以显著提升用户体验。
热门推荐:
0