如何使Bootstrap禁用态Popover在非按钮元素上生效?
解决方案:在非按钮禁用元素上实现Bootstrap禁用态Popover
当然可行!不过得先搞清楚为啥禁用元素上的Popover默认不生效——因为禁用元素的pointer-events通常被设成了none,鼠标事件根本触发不到它身上。Bootstrap对按钮的禁用态Popover做了内部处理,但非按钮元素得我们手动调整,下面给你两种实用方案:
方案一:借助父容器触发Popover
利用禁用元素的外层容器来绑定Popover,让父容器接收鼠标事件,同时保留禁用元素的不可点击状态:
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <!-- 把Popover绑定到外层span上 --> <span class="edit" data-toggle="popover" data-content="这是非按钮禁用元素的提示内容" data-trigger="hover"> <a class="btn btn-box-tool edit-tool btn btn-primary disabled" disabled="" style="pointer-events:none">not a button</a> </span> <button type="button" class="btn btn-primary disabled" data-toggle="popover" data-content="这是按钮的提示内容">button</button> <script> $(function () { $('[data-toggle="popover"]').popover(); }); </script>
说明:给禁用的<a>标签保留pointer-events:none确保它无法被点击,外层<span>负责接收鼠标hover事件来触发Popover,触发方式也可以改成focus,根据你的需求调整。
方案二:直接调整禁用元素的事件属性
如果不想额外加父容器,可以给禁用元素临时开启pointer-events,同时用JS阻止它的点击行为,保证“禁用”的体验:
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <a class="btn btn-box-tool edit-tool btn btn-primary disabled" disabled="" data-toggle="popover" data-content="这是非按钮禁用元素的提示内容">not a button</a> <button type="button" class="btn btn-primary disabled" data-toggle="popover" data-content="这是按钮的提示内容">button</button> <script> $(function () { // 给非按钮的禁用元素开启pointer-events,同时阻止点击行为 $('.disabled:not(button)').css('pointer-events', 'auto').on('click', function(e) { e.preventDefault(); e.stopPropagation(); }); $('[data-toggle="popover"]').popover(); }); </script>
说明:这种方式让禁用元素能接收到鼠标事件以触发Popover,但通过点击事件阻止了它的默认行为(比如跳转、点击动作),保持了禁用的状态。
内容的提问来源于stack exchange,提问作者peace_love
相关产品推荐
相关产品推荐

