如何在禁用按钮上启用 Bootstrap 工具提示?

IT技术 javascript jquery html twitter-bootstrap twitter-bootstrap-tooltip
2021-03-14 02:01:06

我需要在禁用的按钮上显示工具提示并在启用的按钮上将其删除。目前,它反向工作。

扭转这种行为的最佳方法是什么?

$('[rel=tooltip]').tooltip();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
<hr>
<button class="btn" disabled rel="tooltip" data-title="Dieser Link führt zu Google">button disabled</button>
<button class="btn" rel="tooltip" data-title="Dieser Link führt zu Google">button not disabled</button>

这是一个演示

PS:我想保留disabled属性。

6个回答

您可以包装禁用的按钮并将工具提示放在包装器上:

<div class="tooltip-wrapper" data-title="Dieser Link führt zu Google">
  <button class="btn btn-default" disabled>button disabled</button>
</div>

如果包装器有display:inline那么工具提示似乎不起作用。使用display:block并且display:inline-block似乎工作正常。它似乎也适用于浮动包装。

更新 这是一个更新的 JSFiddle,适用于最新的 Bootstrap (3.3.6)。感谢@JohnLehmann 建议pointer-events: none;禁用按钮。

http://jsfiddle.net/cSSUA/209/

这是文档的建议,如果您使用此处建议的内联块技巧,它就会起作用!
2021-04-21 02:01:06
这在 bootstrap 3.3.5 中似乎不起作用。JSFiddle
2021-04-27 02:01:06
对于 bootstrap 3.3.5 还添加 .btn-default[disabled] { pointer-events:none; }
2021-05-06 02:01:06
但是,如果您的按钮是按钮组的一部分,那么包裹按钮会破坏您的美感 :( 无论如何要克服btn-groups 的这个问题
2021-05-13 02:01:06
Cody,对于 btn-groups,我发现您无法包装它们,否则它们将无法正确呈现。我将指针事件设置为“自动”(只是针对:“div.btn-group > .btn.disabled {pointer-events: auto; }”以防万一),并且还连接了按钮的 onclick 事件它只是返回false。感觉很糟糕,但它适用于我们的应用程序。
2021-05-17 02:01:06

这可以通过 CSS 来完成。“pointer-events”属性是阻止工具提示出现的原因。您可以通过覆盖引导程序设置的“指针事件”属性来获取禁用的按钮以显示工具提示。

.btn.disabled {
    pointer-events: auto;
}
这似乎不适用于[disabled]按钮。也看不到 Bootstrap (2.3.2) 在源中的任何地方分配指针事件。
2021-04-21 02:01:06
@kangax 你是对的,这只适用于通过 bs 'disabled' 类禁用的按钮。Balexand 的答案(stackoverflow.com/a/19938049/1794871)在这种情况下效果最好。感谢您指出了这一点。
2021-05-08 02:01:06
在 bootstrap3 angular 应用程序中,应用此样式后,禁用按钮现在可点击
2021-05-10 02:01:06
我试图在带有 btn 类的锚上使用它。看起来被禁用并且工具提示有效,但我可以点击链接(应该不可能)。
2021-05-11 02:01:06
只是附带说明,这仅适用于 11 或更高版本的 IE。几乎所有其他现代浏览器都支持它一段时间。请参阅:caniuse.com/#feat=pointer-events
2021-05-12 02:01:06

如果您对复选框、文本框等的工具提示感到绝望(就像我一样),那么这里是我的 hackey 解决方法:

$('input:disabled, button:disabled').after(function (e) {
    d = $("<div>");
    i = $(this);
    d.css({
        height: i.outerHeight(),
        width: i.outerWidth(),
        position: "absolute",
    })
    d.css(i.offset());
    d.attr("title", i.attr("title"));
    d.tooltip();
    return d;
});

工作示例:http : //jsfiddle.net/WB6bM/11/

就其value而言,我相信禁用表单元素的工具提示对用户体验非常重要。如果你阻止某人做某事,你应该告诉他们原因。

对于应该烤的东西来说真是一场噩梦:(
2021-04-22 02:01:06
这应该是正确答案。对我来说似乎根本不是 hackey :)
2021-05-07 02:01:06
对此的投票数量感到惊讶。对于可以有一个简单解决方法的东西来说,代码太多了。
2021-05-11 02:01:06
这很有效,但是如果您的输入位置根据窗口大小而变化(例如您的表单元素环绕/移动),您将需要在 $(window).resize 上添加一些处理以移动工具提示 div,否则它们会出现在错误的地方。我建议结合这里的 CMS 答案:stackoverflow.com/questions/2854407/...
2021-05-12 02:01:06

这是一些工作代码:http : //jsfiddle.net/mihaifm/W7XNU/200/

$('body').tooltip({
    selector: '[rel="tooltip"]'
});

$(".btn").click(function(e) {
    if (! $(this).hasClass("disabled"))
    {
        $(".disabled").removeClass("disabled").attr("rel", null);

        $(this).addClass("disabled").attr("rel", "tooltip");
    }
});

这个想法是将工具提示添加到带有selector选项的父元素,然后rel在启用/禁用按钮时添加/删除属性。

小提琴在 Firefox 中不起作用(至少)
2021-04-25 02:01:06
我可以获得针对 Bootstrap 4.1 版的更新修复吗?
2021-04-30 02:01:06
这是公认的答案,因为它在 2012 年得到了回答。从那时起,事情发生了变化,主要是小提琴中使用的外部资源。我添加了新的 URL 到 bootstrap cdn,代码还是一样的。
2021-05-07 02:01:06

基于Bootstrap 4

禁用元素 具有禁用属性的元素不具有交互性,这意味着用户无法聚焦、悬停或单击它们以触发工具提示(或弹出框)。作为解决方法,您需要从包装器或 触发工具提示,理想情况下使用 tabindex="0" 使键盘可聚焦,并覆盖禁用元素上的指针事件。

<span class="d-inline-block" tabindex="0" data-toggle="tooltip" title="Disabled tooltip">
  <button class="btn btn-primary" style="pointer-events: none;" type="button" disabled>Disabled button</button>
</span>

此处的所有详细信息:Bootstrap 4 文档

感谢您的帖子,可以相信我忽略了这个设置。
2021-04-30 02:01:06