
本文介绍如何使用 jQuery 实现当多个输入框中的任何一个获得焦点时,始终保持一个可折叠的 div 展开,并在失去焦点时关闭该 div。核心思路是利用 focus 和 focusout 事件,配合 collapse 方法控制 div 的显示与隐藏。
实现原理
Bootstrap 的 Collapse 组件允许您通过点击或其他方式切换内容的可见性。 默认情况下,点击带有 data-toggle="collapse" 和 data-target="#yourCollapseID" 属性的元素会切换与 #yourCollapseID 关联的 div 的可见性。 然而,如果希望根据输入框的焦点状态来控制 Collapse 组件,则需要使用 JavaScript (特别是 jQuery) 来监听 focus 和 focusout 事件,并相应地调用 collapse('show') 和 collapse('hide') 方法。
实现步骤
-
HTML 结构: 确保您的 HTML 结构包含触发器输入框和一个可折叠的 div。 每个输入框都应具有一个共同的 class,以便于 jQuery 选择器使用。
= $ Calc phys% using effective age of /Lifespan of
Physical External Functional % of Cost New Lump Sum -
jQuery 代码: 使用 jQuery 监听输入框的 focus 和 focusout 事件。
$(function () { $('.toggleDepDiv').on('focus', function () { $('#exampleModal').collapse('show'); }); $('.toggleDepDiv').focusout(function (e) { // 检查焦点是否转移到另一个 .toggleDepDiv 元素 if (!$(e.relatedTarget).hasClass('toggleDepDiv')) { $('#exampleModal').collapse('hide'); } }); });- $('.toggleDepDiv').on('focus', function () { ... });: 当任何具有 toggleDepDiv 类的输入框获得焦点时,执行此函数。 $('#exampleModal').collapse('show'); 会展开 ID 为 exampleModal 的 Collapse 组件。
- $('.toggleDepDiv').focusout(function (e) { ... });: 当任何具有 toggleDepDiv 类的输入框失去焦点时,执行此函数。
- if (!$(e.relatedTarget).hasClass('toggleDepDiv')) { ... }: e.relatedTarget 属性指向失去焦点后获得焦点的元素。 此条件语句检查失去焦点后,焦点是否转移到了另一个具有 toggleDepDiv 类的元素。 如果不是,则执行 $('#exampleModal').collapse('hide');,隐藏 Collapse 组件。
代码解释
- $(function () { ... });: 这是一个 jQuery 的简写方式,等同于 $(document).ready(function () { ... });。 它确保在 DOM 加载完成后执行代码。
- .collapse('show'): Bootstrap Collapse 组件的方法,用于显示 Collapse 组件。
- .collapse('hide'): Bootstrap Collapse 组件的方法,用于隐藏 Collapse 组件。
- e.relatedTarget: focusout 事件对象的一个属性,表示失去焦点后获得焦点的元素。 如果焦点没有转移到另一个元素(例如,点击了页面空白处),则 e.relatedTarget 可能为 null。
注意事项
- 确保您的页面引入了 jQuery 和 Bootstrap 的 CSS 和 JavaScript 文件。
- 确保 data-target 属性的值与 Collapse 组件的 ID 相匹配。
- 可以根据需要调整 CSS 样式,以获得所需的视觉效果。
- 如果 Collapse 组件包含复杂的表单元素,请确保在隐藏和显示时正确处理这些表单元素的状态。
总结
通过使用 jQuery 监听 focus 和 focusout 事件,并结合 Bootstrap Collapse 组件的 show 和 hide 方法,可以实现根据输入框的焦点状态动态控制 Collapse 组件的显示和隐藏。 这种方法可以提高用户体验,并使表单更加易于使用。










