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

Lor*_*ard 158 html javascript jquery twitter-bootstrap twitter-bootstrap-tooltip

我需要在禁用按钮上显示工具提示,并在启用按钮上将其删除.实际上它以相反的方式工作.

反转此行为的最佳方法是什么?

$('[rel=tooltip]').tooltip();
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

这是演示:http://jsfiddle.net/BA4zM/68/

PS:我想保持属性被禁用.

bal*_*and 243

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

<div class="tooltip-wrapper" data-title="Dieser Link führt zu Google">
  <button class="btn btn-default" disabled>button disabled</button>
</div>
Run Code Online (Sandbox Code Playgroud)

如果包装器有,display:inline则工具提示似乎不起作用.使用display:block,display:inline-block似乎工作正常.它似乎也适用于浮动包装.

更新这是一个更新的JSFiddle,它与最新的Bootstrap(3.3.6)一起使用.感谢@JohnLehmann建议pointer-events: none;使用残疾人按钮.

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

  • 对于bootstrap 3.3.5,还要添加.btn-default [disabled] {pointer-events:none; } (16认同)
  • 这是文档建议的内容,如果您使用此处建议的内联块技巧,它可以正常工作! (5认同)
  • 但是,如果你的按钮是一个按钮组的一部分,那么包装按钮会抛弃你的美学:(无论如何要克服这个问题为`btn-group`s? (3认同)
  • 这似乎在bootstrap 3.3.5中不起作用.[的jsfiddle](http://jsfiddle.net/o3r0b7re/) (3认同)
  • Cody,对于btn-groups,我发现你无法包装它们,或者它们无法正确渲染.我将指针事件设置为'auto'(仅针对:"div.btn-group> .btn.disabled {pointer-events:auto;}"以防万一),并且还连接按钮的onclick事件,以便它只是返回false.感觉很讨厌,但它适用于我们的应用程序. (2认同)

Gen*_*ano 106

这可以通过CSS完成."pointer-events"属性阻止了工具提示的出现.您可以通过覆盖bootstrap设置的"pointer-events"属性来获取禁用按钮以显示工具提示.

.btn.disabled {
    pointer-events: auto;
}
Run Code Online (Sandbox Code Playgroud)

  • 这似乎不适用于`[disabled]`按钮.另外,没有看到Bootstrap(2.3.2)在源中的任何位置分配指针事件. (11认同)
  • 在bootstrap3 angular app中,应用此样式后,现在可以单击禁用的按钮 (6认同)
  • 简单而优秀的解决方案,完美无缺. (5认同)
  • 我尝试在btn类的锚上使用它.它_looked_禁用,工具提示工作,但我可以点击链接(不应该可能). (3认同)
  • 只是附带说明,这仅适用于 11 或更高版本的 IE。几乎所有其他现代浏览器都支持它一段时间。请参阅:http://caniuse.com/#feat=pointer-events (2认同)

nol*_*pro 25

如果你对复选框,文本框等工具提示感到绝望(就像我),那么这是我的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;
});
Run Code Online (Sandbox Code Playgroud)

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

对于它的价值,我相信对于已禁用的表单元素的工具提示对于UX非常重要.如果你阻止某人做某事,你应该告诉他们原因.

  • 什么是应该烘烤的东西的噩梦:( (4认同)

mih*_*hai 17

这是一些工作代码: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");
    }
});
Run Code Online (Sandbox Code Playgroud)

我们的想法是使用selector选项将工具提示添加到父元素,然后rel在启用/禁用按钮时添加/删除属性.

  • 这是被接受的答案,因为它在2012年收到答复时就起作用了。从那以后情况发生了变化,主要是小提琴中使用的外部资源。我向Bootstrap CDN添加了新的URL,代码仍然相同。 (3认同)
  • 我可以针对Bootstrap版本4.1获得更新的修复程序吗? (3认同)

gon*_*250 11

基于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>
Run Code Online (Sandbox Code Playgroud)

这里的所有细节:Bootstrap 4 doc

  • 感谢您的帖子,可以相信我忽略了这个设置。 (2认同)

Nat*_*ach 9

如果它对任何人有帮助,我就能够获得一个禁用按钮来显示工具提示,只需在其中放置一个跨度并在其中应用工具提示内容,在其周围应用 angularjs...

<button ng-click="$ctrl.onClickDoThis()"
        ng-disabled="!$ctrl.selectedStuff.length">
  <span tooltip-enable="!$ctrl.selectedStuff.length"
        tooltip-append-to-body="true"
        uib-tooltip="Select at least one thing to enable button.">
    My Butt
  </span>
</button>
Run Code Online (Sandbox Code Playgroud)

  • 你很聪明。如此简单的解决方案。 (2认同)

luk*_*yer 6

这些变通办法很难看.我调试的问题是bootstrap 在禁用的元素上自动设置CSS属性pointer-events:none.

这个神奇的属性导致JS无法处理与CSS选择器匹配的元素上的任何事件.

如果您将此属性覆盖为默认属性,则一切都像魅力一样,包括工具提示!

.disabled {
  pointer-events: all !important;
}
Run Code Online (Sandbox Code Playgroud)

但是,您不应该使用这样的常规选择器,因为您可能必须手动停止您知道的JavaScript事件传播(e.preventDefault()).


Ada*_*dam 5

您无法在禁用的按钮上显示工具提示.这是因为禁用的元素不会触发任何事件,包括工具提示.你最好的选择是伪造按钮被禁用(因此它的外观和行为类似于它的禁用),因此你可以触发工具提示.

例如.使用Javascript:

$('[rel=tooltip].disabled').tooltip();

$('[rel=tooltip].disabled').bind('click', function(){
     return false;
});
Run Code Online (Sandbox Code Playgroud)

而不仅仅是 $('[rel=tooltip]').tooltip();?

HTML:

<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>
Run Code Online (Sandbox Code Playgroud)

JSFiddle:http://jsfiddle.net/BA4zM/75/


vor*_*laz 5

就我而言,上述解决方案均无效.我发现使用绝对元素重叠禁用按钮更容易:

<div rel="tooltip" title="I workz" class="wrap">
  <div class="overlap"></div>
  <button>I workz</button>
</div>

<div rel="tooltip" title="Boo!!" class="wrap poptooltip">
  <div class="overlap"></div>
  <button disabled>I workz disabled</button>
</div>

.wrap {
  display: inline-block;
  position: relative;
}

.overlap {
  display: none
}

.poptooltip .overlap {
  display: block;
  position: absolute;
  height: 100%;
  width: 100%;
  z-index: 1000;
}
Run Code Online (Sandbox Code Playgroud)

演示


Den*_*nov 5

试试这个例子:

工具提示必须使用初始化jQuery:选择指定的元素并在中调用tooltip()方法JavaScript

$(document).ready(function () {
    $('[data-toggle="tooltip"]').tooltip();
});
Run Code Online (Sandbox Code Playgroud)

添加CSS

.tool-tip {
  display: inline-block;
}

.tool-tip [disabled] {
  pointer-events: none;
}
Run Code Online (Sandbox Code Playgroud)

和你的HTML:

<span class="tool-tip" data-toggle="tooltip" data-placement="bottom" title="I am Tooltip">
    <button disabled="disabled">I am disabled</button>
</span>
Run Code Online (Sandbox Code Playgroud)