Comment activer l'info-bulle bootstrap sur le bouton désactivé?

J'ai besoin d'afficher une info-bulle sur le bouton désactivé et l'enlever sur le bouton activé. En fait, cela fonctionne de manière inverse.

Quelle est la meilleure façon d'inverser ce comportement?

$('[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>

Voici la démo: http://jsfiddle.net/BA4zM/68/

P.S.: Je veux garder l'attribut désactivé.

132
demandé sur Ben Smith 2012-11-09 20:03:51

14 réponses

Voici un code de travail: 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");
    }
});

L'idée est d'ajouter l'info-bulle à un élément parent avec l'option selector, puis Ajouter / Supprimer l'attribut rel lors de l'activation/désactivation du bouton.

14
répondu mihai 2017-05-25 07:40:26

Vous pouvez envelopper le bouton désactivé et mettre l'info-bulle sur le wrapper:

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

Si le wrapper a display:inline alors l'info-bulle ne semble pas fonctionner. L'utilisation de display:block et display:inline-block semble fonctionner correctement. Il semble également fonctionner correctement avec un wrapper flotté.

UPDATE voici un jsfiddle mis à jour qui fonctionne avec le dernier Bootstrap (3.3.6). Merci à @ JohnLehmann pour avoir suggéré pointer-events: none; pour le bouton désactivé.

Http://jsfiddle.net/cSSUA/209/

215
répondu balexand 2016-02-17 00:45:12

Cela peut être fait via CSS. La propriété" pointer-events " est ce qui empêche l'info-bulle d'apparaître. Vous pouvez obtenir des boutons désactivés Pour afficher l'info-bulle en remplaçant la propriété "pointer-events" définie par bootstrap.

.btn.disabled {
    pointer-events: auto;
}
98
répondu Gene Parcellano 2014-04-04 15:54:32

Si vous êtes désespéré (comme je l'étais) pour les info-bulles sur les cases à cocher, les zones de texte et autres, alors voici ma solution de contournement 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;
});

Exemples de travail: http://jsfiddle.net/WB6bM/11/

Pour ce que cela vaut, je crois que les info-bulles sur les éléments de formulaire désactivés sont très importantes pour L'UX. Si vous empêchez quelqu'un de faire quelque chose, vous devriez lui dire pourquoi.

24
répondu nolanpro 2013-02-25 20:59:31

Ces solutions de contournement sont laides. J'ai débogué le problème est que bootstrap définit automatiquement la propriété CSS pointer-events: none sur les éléments désactivés.

Cette propriété magique provoque que JS ne peut gérer aucun événement sur les éléments qui correspondent à CSS selector.

Si vous écrasez cette propriété par défaut, tout fonctionne comme un charme, y compris les infobulles!

.disabled {
  pointer-events: all !important;
}

Cependant, vous ne devriez pas utiliser le sélecteur Si général, car vous devrez probablement le faire arrêtez manuellement la propagation des événements JavaScript comme vous le savez ( e. preventDefault () ).

6
répondu lukyer 2015-06-01 08:57:55

Vous ne pouvez pas afficher l'info-bulle sur un bouton désactivé. En effet, les éléments désactivés ne déclenchent aucun événement, y compris l'info-bulle. Votre meilleur pari serait de simuler le bouton désactivé (de sorte qu'il ressemble et agit comme son désactivé), de sorte que vous pouvez ensuite déclencher l'info-bulle.

Par exemple. Javascript:

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

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

Au Lieu de simplement $('[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>

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

5
répondu Adam 2012-11-09 16:23:50

Dans mon cas, aucune des solutions ci-dessus n'a fonctionné. J'ai trouvé qu'il est plus facile de chevaucher le bouton désactivé en utilisant un élément absolu comme:

<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;
}

Démo

5
répondu vorillaz 2017-01-15 12:31:02

Essayez cet exemple:

Info-bulles doivent être initialisées avec jQuery: sélectionnez l'élément spécifié et d'appeler la tooltip() méthode JavaScript:

$(document).ready(function () {
    $('[data-toggle="tooltip"]').tooltip();
});

Ajouter CSS:

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

.tool-tip [disabled] {
  pointer-events: none;
}

Et votre html:

<span class="tool-tip" data-toggle="tooltip" data-placement="bottom" title="I am Tooltip">
    <button disabled="disabled">I am disabled</button>
</span>
4
répondu Denis Bubnov 2017-03-24 09:30:45

C'est ce que tekromancr et moi-même avons trouvé.

Exemple d'élément:

<a href="http://www.google.com" id="btn" type="button" class="btn btn-disabled" data-placement="top" data-toggle="tooltip" data-title="I'm a tooltip">Press Me</a>

Remarque: l'info-bulle attributs peuvent être ajoutés à un div dont l'id de la div doit être utilisé lors de l'appel .info-bulle ('détruire'); ou .info-bulle ();

Cela active l'info-bulle, mettez-la dans n'importe quel javascript inclus dans le fichier html. cette ligne pourrait ne pas être nécessaire d'ajouter, cependant. (si l'info-bulle affiche sans cette ligne, alors ne vous embêtez pas à l'inclure)

$("#element_id").tooltip();

Détruit info-bulle, voir ci-dessous pour l'utilisation.

$("#element_id").tooltip('destroy');

Empêche le bouton d'être cliquable. parce que l'attribut disabled n'est pas utilisé, cela est nécessaire, sinon le bouton serait toujours cliquable même s'il" semble " comme s'il était désactivé.

$("#element_id").click(
  function(evt){
    if ($(this).hasClass("btn-disabled")) {
      evt.preventDefault();
      return false;
    }
  });

En utilisant bootstrap, les classes btn Et btn-disabled sont à votre disposition. Remplacer ces dans votre propre .fichier css. vous pouvez ajouter des couleurs ou ce que vous voulez que le bouton ressembler lorsqu'il est désactivé. Assurez-vous de garder le curseur: par défaut; vous pouvez également changer quoi .btn.btn-le succès ressemble.

.btn.btn-disabled{
    cursor: default;
}

Ajoutez le code ci-dessous à tout javascript contrôlant que le bouton devient activé.

$("#element_id").removeClass('btn-disabled');
$("#element_id").addClass('btn-success');
$('#element_id).tooltip('destroy');

L'info-bulle ne doit maintenant s'afficher que lorsque le bouton est désactivé.

Si vous utilisez angularjs j'ai aussi une solution pour que, si vous le souhaitez.

3
répondu user3885123 2014-07-28 17:19:17

Vous pouvez simplement remplacer le style "pointer-events" de Bootstrap pour les boutons désactivés via CSS, par exemple

.btn[disabled] {
 pointer-events: all !important;
}

Mieux vaut toujours être explicite et désactiver des boutons spécifiques par exemple

#buttonId[disabled] {
 pointer-events: all !important;
}
3
répondu Ben Smith 2017-02-20 21:55:20

Code de travail pour Bootstrap 3.3.6

Javascript:

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

$(".btn").click(function(e) {
 if ($(this).hasClass("disabled")){
   e.preventDefault();
 }
});

CSS:

a.btn.disabled, fieldset[disabled] a.btn {
  pointer-events: auto;
}
1
répondu Nerian 2016-04-28 09:43:04

pointer-events: auto; ne fonctionne pas sur un <input type="text" />.

J'ai adopté une approche différente. Je ne désactive pas le champ de saisie, mais le fais agir comme désactivé via CSS et javascript.

, Car le champ de saisie n'est pas désactivé, l'info-bulle s'affiche correctement. C'était dans mon cas beaucoup plus simple que d'ajouter un wrapper au cas où le champ de saisie était désactivé.

$(document).ready(function () {
  $('.disabled[data-toggle="tooltip"]').tooltip();
  $('.disabled').mousedown(function(event){
    event.stopImmediatePropagation();
    return false;
  });
});
input[type=text].disabled{
  cursor: default;
  margin-top: 40px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.3.3/js/tether.min.js"></script>
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet"> 
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>


<input type="text" name="my_field" value="100" class="disabled" list="values_z1" data-toggle="tooltip" data-placement="top" title="this is 10*10">
0
répondu John Smith 2016-07-20 12:10:58

Vous pouvez imiter L'effet en utilisant CSS3.

Supprimez simplement l'état Désactivé du bouton et l'info-bulle n'apparaît plus.. c'est génial pour la validation car le code nécessite moins de logique.

J'ai écrit ce stylo pour illustrer.

CSS3 désactivé info-bulles

[disabled] {
  &[disabled-tooltip] {
    cursor:not-allowed;
    position: relative;
    &:hover {
      &:before {
        content:'';
        border:5px solid transparent;
        border-top:5px solid black;
        position: absolute;
        left: 50%;
        transform: translate(-50%, calc(-100% + -5px));
      }
      &:after {
        content: attr(disabled-tooltip);
        position: absolute;
        left: 50%;
        transform: translate(-50%, calc(-100% + -15px));
        width:280px;
        background-color:black;
        color:white;
        border-radius:5px;
        padding:8px 12px;
        white-space:normal;
        line-height:1;
      }
    }
  }
}

<button type="button" class="btn btn-primary" disabled-tooltip="I am a disabled tooltip using CSS3.. You can not click this button." disabled>Primary Button</button>
0
répondu beau 2018-02-12 00:54:36

Pour Bootstrap 3

HTML

<button 
    class="btn btn-success" 
    disabled
    data-hint="Enabled">
  <div class="sp-btn-overlap" data-hint="Disabled"></div>
  Submit button
</button>

CSS

button { position:relative; }

.sp-btn-overlap { 
    position:absolute; 
    top:0; 
    left:0; 
    height:100%; 
    width:100%; 
    background:none; 
    border:none; 
    z-index:1900;
}

JS

$('button .sp-btn-overlap')
    .popover({
        trigger: 'hover',
        container: 'body',
        placement: 'bottom',
        content: function() {
            return $(this).parent().prop('disabled')
                    ? $(this).data('hint')
                    : $(this).parent().data('hint');
            }
        });

$('button .sp-btn-overlap')
  .popover({
    trigger: 'hover',
    container: 'body',
    placement: 'bottom',
    content: function() {
      return $(this).parent().prop('disabled')
                  ? $(this).data('hint')
                  : $(this).parent().data('hint'); }
  });
button {
  position:relative; /* important! */
}

.sp-btn-overlap {
  position:absolute;
  top:0;
  left:0;
  height:100%;
  width:100%;
  background:none;
  border:none;
  z-index:1900;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>

<button disabled class="btn btn-default" data-hint="Enabled">
  <div class="sp-btn-overlap" data-hint="Disabled"></div>
  Disabled button
</button>

<button class="btn btn-default" data-hint="Enabled">
  <div class="sp-btn-overlap" data-hint="Disabled"></div>
  Enabled button
</button>
0
répondu Helgi Kropp 2018-05-23 08:44:36