div.onblur的两个解决方法

本文介绍了两种使用JavaScript控制DIV元素显示与隐藏的方法。一种是通过监听文档点击事件并检查目标元素来控制显示状态;另一种是利用tabindex属性和onblur事件实现。这两种方法各有优缺点,例如第二种方法简单易实现但会导致DIV周围出现虚线框。

1.document.onclick

 

<div id="div1" onclick="test()">fff</div>
<div id="div2" style="display:none;width:200px;height:120px;"><input type="button"  value="hide"/></div>
<script type="text/javascript">
function test () {
 document.getElementById("div2").style.display="";
 document.getElementById("div2").focus();
}

function hide (event) {
 event=(event==null)?window.event:event;
 var div2=document.getElementById("div2");
 var div1=document.getElementById("div1");
 var target_test=event.target?event.target:event.srcElement; 
 (target_test!=div2) && (target_test!=div1)?div2.style.display='none':null;
}
document.onclick=hide;
</script>
虽然没有用onblur,但是实现的效果是同样的


2.tabindex="0"

 

<div id="div3" onclick="test()">fff33</div>
<div id="div4" tabindex="0" onblur="hide()" style="display:none;width:200px;height:120px;"><input type="button"  value="hide"/></div>
<script type="text/javascript">
function test () {
 document.getElementById("div4").style.display="";
 document.getElementById("div4").focus();
}

function hide () {
 var div2=document.getElementById("div4");
 div2.style.display='none';
}
</script>

这个实现的比较简单,但是不好的地方是div有一个虚线框,不晓得有没有办法去掉?

<think>好的,用户现在问的是关于JavaScript中onfocus和onblur事件的常见使用案例。之前他们询问过CSS颜色代码,现在转向了JavaScript的事件处理,可能需要更多的实际例子来解释这两个事件的用途。 首先,我需要确认用户的基础知识水平。之前他们问的是CSS颜色,可能对前端有一定了解,但可能对JavaScript事件不太熟悉。所以需要从基础开始解释,但不要过于简单,以免显得啰嗦。 接下来,用户的需求是什么?他们可能想了解这两个事件在实际开发中的应用场景,比如表单验证、UI交互优化等。需要举一些常见的例子,比如输入框获得焦点时提示,失去焦点时验证输入内容。 另外,用户可能没有明确说明,但深层需求可能是如何提升用户体验或表单的交互性。因此,在回答时不仅要说明用法,还要强调这些事件如何改善用户界面。 还需要考虑是否有其他相关事件或API和这两个事件一起使用,比如onchange或者addEventListener方法,但用户的问题明确是关于onfocus和onblur的,所以暂时不需要扩展其他内容,但可以提到现代事件监听方法作为最佳实践。 还要注意区分HTML属性事件和JavaScript中addEventListener的区别,避免混淆。可能需要提到使用addEventListener更灵活,但用户的问题可能更关注于基本用法,所以先介绍属性方式,再提及现代方法。 然后,常见的使用案例可能包括输入验证、动态提示、自动补全、保存数据等。需要每个案例都简明扼要,给出代码示例,但不要太复杂,保持易懂。 同时,需要指出潜在的问题,比如兼容性或者事件冒泡,但用户可能暂时不需要这些,所以放在注意事项里简要说明。 最后,总结一下这两个事件的重要性,以及它们在增强交互性方面的作用,帮助用户理解为什么这些事件是常用的。 可能用户是前端初学者,正在学习事件处理,所以回答需要结构清晰,分点说明,代码示例简单明了,便于理解和实践。</think>在 JavaScript 中,`onfocus` 和 `onblur` 是用于处理元素**焦点事件**的常用 API,它们与用户交互密切相关。以下是它们的定义和常见使用场景: --- ### **1. `onfocus` 事件** - **触发条件**:当用户通过点击、Tab 键切换等方式让元素(如输入框、按钮)获得焦点时触发。 - **常见用途**: - **输入提示**:在输入框获得焦点时显示提示文字或动态展开下拉菜单(如搜索框自动补全)。 - **高亮元素**:突出显示当前聚焦的输入框(如修改边框颜色)。 - **初始化操作**:聚焦时自动清空默认占位符内容。 #### 示例代码: ```html <input type="text" id="username" placeholder="请输入用户名"> <script> const input = document.getElementById("username"); input.onfocus = function() { this.style.border = "2px solid #007bff"; // 聚焦时蓝色边框 this.placeholder = ""; // 清空占位符 }; </script> ``` --- ### **2. `onblur` 事件** - **触发条件**:当元素失去焦点时触发(如用户点击其他地方或按 Tab 键离开)。 - **常见用途**: - **输入验证**:在用户离开输入框时检查内容是否合法(如邮箱格式、密码强度)。 - **自动保存**:输入内容失去焦点后自动提交或保存数据(如实时保存笔记)。 - **恢复默认状态**:隐藏提示或还原样式(如下拉菜单收起)。 #### 示例代码: ```html <input type="email" id="email" placeholder="请输入邮箱"> <div id="error" style="color: red; display: none">邮箱格式错误!</div> <script> const emailInput = document.getElementById("email"); const errorMsg = document.getElementById("error"); emailInput.onblur = function() { const email = this.value; if (!email.includes("@")) { errorMsg.style.display = "block"; // 显示错误提示 this.style.border = "2px solid red"; } else { errorMsg.style.display = "none"; } }; </script> ``` --- ### **经典应用场景** 1. **表单交互优化** - 聚焦时放大输入框,失去焦点时恢复。 - 输入框失去焦点后实时向服务器发送验证请求(如检查用户名是否被占用)。 2. **动态 UI 控制** - 聚焦搜索框时展开历史记录列表,失去焦点后隐藏。 - 表格中编辑单元格后,失去焦点时自动提交修改。 3. **无障碍体验** - 为屏幕阅读器提供焦点状态反馈(如聚焦按钮时语音提示功能)。 --- ### **注意事项** - **兼容性**:`onfocus` 和 `onblur` 是传统的事件属性,现代开发更推荐用 `addEventListener` 绑定事件: ```javascript element.addEventListener("focus", handleFocus); element.addEventListener("blur", handleBlur); ``` - **冒泡机制**:`focus` 和 `blur` 事件**不冒泡**,若需监听子元素焦点,可使用 `focusin` 和 `focusout`。 - **与 `onchange` 的区别**:`onchange` 在值修改且失去焦点后触发,而 `onblur` 只关注焦点变化,不关心值是否变化。 --- ### **总结** `onfocus` 和 `onblur` 是实现精细化用户交互的核心工具,尤其适合需要响应焦点变化的场景(如表单、动态 UI)。合理使用它们能显著提升用户体验! 🚀
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值