Tıklandığında Twitter Bootstrap Araç İpucu içeriğini değiştirme


224

Ben bir AJAX isteği tıklama gönderir bir bağlantı elemanı üzerinde bir araç ipucu var. Bu öğenin bir ipucu vardır (Twitter Bootstrap'tan). AJAX isteği başarıyla döndüğünde araç ipucu içeriğinin değişmesini istiyorum. Başlatma işleminden sonra ipucunu nasıl değiştirebilirim?

Yanıtlar:


411

Kaynak kodunu okurken bunu bugün buldum. Yani sınıf $.tooltip(string)içindeki herhangi bir işlevi çağırır Tooltip. Ve bakarsanız Tooltip.fixTitle,data-original-title özelliği alır ve başlık değerini onunla değiştirir.

Yani basitçe şunu yaparız:

$(element).tooltip('hide')
          .attr('data-original-title', newValue)
          .tooltip('fixTitle')
          .tooltip('show');

ve yeterince emin olun, araç ipucunun içindeki değer olan başlığı günceller.

Başka bir yol (aşağıdaki @lukmdo yorumuna bakın):

$(element).attr('title', 'NEW_TITLE')
          .tooltip('fixTitle')
          .tooltip('show');

5
Teşekkürler! Bu bir saat boyunca şaşırmıştı.
dal

160
Veya daha kısa (daha pürüzsüz)$(element).attr('title', 'NEW_TITLE').tooltip('fixTitle').tooltip('show');
lukmdo

5
Ayrıca başlığı veri ('ipucu') seçenekler özelliği ile değiştirebilirsiniz, bkz. Stackoverflow.com/questions/10181847/…
James McMahon

4
'FixTitle' ile ilgili belgeler bulunamadı, bu yüzden bunu kullanmak için iyi bir fikir değil sanırım !? ...
user2846569

16
Bu aslında benim için işe yaramadı, araç ipucu değerleri değiştirdi ve sonra hızla kayboldu. $(element).attr('data-original-title', newValue).tooltip('show');benim için en basit çözümdü.
Gabe O'Leary

98

Önyükleme 3'te elt.attr('data-original-title', "Foo"), "data-original-title"öznitelikteki değişiklikler araç ipucu ekranında zaten değişiklikleri tetiklediğinden çağırmak yeterlidir .

GÜNCELLEME: Değişiklikleri hemen göstermek için .tooltip ('show') ekleyebilirsiniz, başlıktaki değişikliği görmek için fareyle üzerine gelme ve fareyle üzerine gelme hedefini kullanmamanız gerekir

elt.attr('data-original-title', "Foo").tooltip('show');

5
Temiz cevap, neden ups: <
ays0110

3
Değişiklikleri hemen uygulamaz, yeni başlık metnini görmek için fareyle üzerine gelme ve fareyle üzerine gelme hedefi gerekir
Lev Lukomsky

9
Bu aslında en iyi cevap ve .tooltip('show');güncellemeden sonra göstermek için ekleyebilirsiniz
Jared

Bu sadece işe yarıyor gibi görünen tek çözüm (denenmiş birçok) (bs3). Kesinlikle güzel bir çözüm!
jyoseph

3
Bu çözüm diğerlerinden daha iyidir
Ayyaz Zafar

14

araç ipucu metnini gerçekten show / hide çağırmadan güncelleyebilirsiniz:

$(myEl)
    .attr('title', newTitle)
    .tooltip('fixTitle')
    .tooltip('setContent')

3
Bu, .tooltip('show')zincirin sonunda benim için çalıştı.
markau

1
evet, setContentve showhile yapar! data-original-titlekullanmak yerine doğrudan değiştirebilirsinizfixTitle
brauliobo

Bootstrap v2.3.1
Ricardo

13

araç ipucunu kapatmadan ve yeniden açmadan metni değiştirmek isterseniz güzel bir çözüm.

$(element).attr('title', newTitle)
          .tooltip('fixTitle')
          .data('bs.tooltip')
          .$tip.find('.tooltip-inner')
          .text(newTitle)

Bu şekilde, araç ipucu kapatılmadan metin değiştirildi (yeniden konumlandırmıyor, ancak bir kelime değişikliği yapıyorsanız vb. iyi olmalı). ve araç ipucunun üzerine geldiğinizde + geri döndüğünüzde hala güncellenir.

** bu bootstrap 3, 2 için muhtemelen veri / sınıf adlarını değiştirmeniz gerekiyor


5
Diyor $tipki bir özellik değil$(element)
Augustin Riedinger

Bunu yaptı:$(element).attr('title', newTitle).tooltip('fixTitle').parent().find('.tooltip .tooltip-inner').text(newTitle);
Augustin Riedinger

Bir metin alanına yazarken komşu bir öğenin araç ipucunu güncelliyorum ve bir tuşa bastığımda araç ipucu bu kodla benim için kayboluyor.
tremby

Bunun için teşekkürler. Bu çözümle ilgili tek sorun, metin değişiminden sonra araç ipucu konumunu bozuyor gibi görünüyor.
Wojciech Zylinski

13

Bootstrap 4 için:

$(element).attr("title", "Copied!").tooltip("_fixTitle").tooltip("show").attr("title", "Copy to clipboard").tooltip("_fixTitle");

3
Bu, belgelenmemiş API kullanır. Dikkat.
Chloe

9

Araç ipucu başlatılmışsa (muhtemelen javascript ile) bu işe yarar:

$("#tooltip_id").data('tooltip').options.title="New_value!";
$("#tooltip_id").tooltip('hide').tooltip('show');

7
Bootstrap 3 ile, olur$('#tooltip_id').data('bs.tooltip').options.title = 'New_value!';
ajbeaven

Merhaba ilişkisel, cevabınızı yorum düzeltmelerini yansıtacak şekilde değiştirebilir misiniz? Teşekkürler.
thouliha

7

Bootstrap 3.x için

Bu en temiz çözüm gibi görünüyor:

$(element)
  .attr('data-original-title', 'New title').tooltip('show')

Göster, başlık güncellemesini hemen yapmak ve araç ipucunun gizlenmesini ve tekrar gösterilmesini beklememek için kullanılır.


7

İşte Bootstrap 4 için güncelleme :

var title = "Foo";
elt.attr('data-original-title', title);
elt.tooltip('update');
elt.tooltip('show');

Ama en iyi yol böyle yapmaktır:

var title = "Foo";
elt.attr('title', title);
elt.attr('data-original-title', title);
elt.tooltip('update');
elt.tooltip('show');

veya satır içi:

var title = "Foo";
elt.attr('title', title).attr('data-original-title', title).tooltip('update').tooltip('show');

UX tarafından, metnin solma veya gizleme / gösterme efektleri olmadan değiştirildiğini ve _fixTitle.


6

Sadece data-original-titleaşağıdaki kodu kullanarak değiştirebilirsiniz :

$(element).attr('data-original-title', newValue);

6

Bootstrap 4

$('#topic_1').tooltip('dispose').tooltip({title: 'Goodbye'}).tooltip('show')

https://getbootstrap.com/docs/4.1/components/tooltips/#tooltipdispose

$('#topic_1').tooltip({title: 'Hello'}).tooltip('show');
setTimeout( function() {
  $('#topic_1').tooltip('dispose').tooltip({title: 'Goodbye'}).tooltip('show');
}, 5000);
#topic_1 {
  border: 1px solid red;
  margin: 50px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/css/bootstrap.min.css" integrity="sha384-Smlep5jCw/wG7hdkwQ/Z5nLIefveQRIY9nfy6xoR1uRYBtpZgI6339F5dgvm/e9B" crossorigin="anonymous">
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
  <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/js/bootstrap.min.js" integrity="sha384-o+RDsa0aLu++PJvFqy8fFScvbHFLtbvScb8AjopnFD+iEQ7wo/CG0xlczd+2O/em" crossorigin="anonymous"></script>

<div id="topic_1">Topic 1</div>


4

Aşağıdaki benim için en iyi çalıştı, temelde mevcut herhangi bir araç ipucu hurdaya ve yeni araç ipucu göstermek için rahatsız değil. Araç ipucunda diğer yanıtlarda olduğu gibi şov çağrılırsa, imleç imlecin üzerine gelmese bile açılır.

Bu çözüm için gitmemizin nedeni, mevcut araç ipucunu yeniden kullanan diğer çözümlerin, imleci öğenin üzerine getirirken bazen araç ipucuyla ilgili bazı garip sorunlara yol açmasıdır.

function updateTooltip(element, tooltip) {
    if (element.data('tooltip') != null) {
        element.tooltip('hide');
        element.removeData('tooltip');
    }
    element.tooltip({
        title: tooltip
    });
}

1
Bu soruya en iyi cevap.
Daniel Miliński

@ DanielMiliński Teşekkürler :)
aknuds1

1
Boostrap3 kullanıyorsanız data('bs.tooltip')yerine kullanmanız gerekirdata('tooltip')
Nigel Angel

3

Bootstrap 4'te sadece $(el).tooltip('dispose');normal olarak yeniden kullanıyorum . Böylece, ikiye katlanmadığından emin olmak için bir araç ipucu oluşturan bir işlevden önce imhayı koyabilirsiniz.

Durumu ve tamircilik değerlerini kontrol etmek daha az kolay görünüyor.


Araç ipucu başlığını güncellemeden önce veya sonra $ (el) .tooltip ('dispose') çağırmalı mıyız?
Fifi

@imabot eski araç ipucunu atın, ardından yeni verilerle yeniden oluşturun. Araç ipuçlarınız karmaşıksa, ilk yapılandırmayı geri almak veya başka bir şekilde depolamak isteyebilirsiniz, böylece yalnızca bu yapılandırma + yeni değerlerle yeniden oluşturabilirsiniz. Umarım mantıklıdır.
Martin Lyne

2

Araç ipucu çağrısında içeriği bir işlevle ayarlayabilirsiniz

        $("#myelement").tooltip({
            "title": function() {
                return "<h2>"+$("#tooltipcontainer").html()+"</h2>";
            }
        });

Yalnızca çağrılan öğenin başlığını kullanmanız gerekmez.


2

Teşekkürler bu kod benim için çok yararlı oldu, ben projelerim üzerinde etkili buldum

$(element).attr('title', 'message').tooltip('fixTitle').tooltip('show');


1

Yeni araç ipucu içeriğiyle yeniden doldurabilmemiz için önceden var olan araç ipuçlarını yok edin

$(element).tooltip("destroy");    
$(element).tooltip({
    title: message
});

1

Yanıtların hiçbirini çalıştıramadım, işte bir çözüm:

$('#'+$(element).attr('aria-describedby')+' .tooltip-inner').html(newTitle);

0

Mehmet Duran'ın neredeyse haklı olduğunu düşünüyorum, ancak aynı araç ipucu ve bunların yerleştirilmesiyle birden fazla sınıf kullanıldığında bazı sorunlar vardı. Aşağıdaki kod ayrıca "tooltip_class" adı verilen herhangi bir sınıf olup olmadığını denetlemek js hatalarını önler. Bu yardımcı olur umarım.

if (jQuery(".tooltip_class")[0]){    

        jQuery('.tooltip_class')
            .attr('title', 'New Title.')
            .attr('data-placement', 'right')
            .tooltip('fixTitle')
            .tooltip('hide');

    }

0

Doğrudan öğedeki metni değiştirerek metni değiştirin. (ipucu konumunu güncellemez).

$('.tooltip-inner', $element.next()).html(newHtml);
$('.tooltip-inner', $element.next()).text(newText);

Eski araç ipucunu yok edip yeni bir tane oluşturup göstererek metni değiştirin. (Eskisinin kaybolmasına ve yenisinin kaybolmasına neden olur)

$element
.tooltip('destroy')
.tooltip({
    // Repeat previous options.
    title: newText,
})
.tooltip('show');

Her ikisi de "Kaydetme" canlandırmak için üst yöntemi kullanıyorum. mesajını ( &nbsparaç ipucunun boyutu değişmezse) ve metni "Bitti" olarak değiştirmek için. (artı dolgu) isteği tamamladığında.

$element.tooltip({
  placement: 'left',
  title: 'Saving...',
  trigger: 'manual',
}).tooltip('show');

var parent = $element.parent();
var interval_id = setInterval(function(){
    var text = $('.tooltip-inner', parent).html();
    switch(text) {
    case 'Saving.&nbsp;&nbsp;': text = 'Saving..&nbsp;'; break;
    case 'Saving..&nbsp;': text = 'Saving...'; break;
    case 'Saving...': text = 'Saving.&nbsp;&nbsp;'; break;
    }
    $('.tooltip-inner', parent).html(text);
}, 250);

send_request( function(){
    // When the request is complete
    clearInterval(interval_id);
    $('.tooltip-inner', parent).html('Done.&nbsp;&nbsp;&nbsp;&nbsp;');
    setTimeout(function() {
        $element.tooltip('hide');
    }, 1500 /* Show "Done." for a bit */);
});

0

Bu benim için çalıştı: (bootstrap 3.3.6; jquery = 1.11.3)

<a id="alertTooltip" href="#" data-html="true" class="tooltip" data-toggle="tooltip" title="Tooltip message"></a>

<script>
  $('#alertTooltip').attr('title', "Tooltip new <br /> message").tooltip('fixTitle');
</script>

Bu özellik data-html="true", araç ipucu başlığında html kullanılmasına izin verir.


0

Araç İpucu nesnesi Boostrap ile:

$(element).attr('data-original-title', 'New value');
$(element).data('bs.tooltip').tip().find('.tooltip-inner').text('New value');

0

BS4 (ve küçük değişikliklerle BS3) için .. saatlerce arama ve denemelerden sonra, bu sorun için en güvenilir çözümü buldum ve aynı anda birden fazla (araç ipucu veya popover) açma sorununu bile çözüyor, ve odağı kaybettikten sonra otomatik olarak açılma sorunu.

$('[data-toggle="tooltip"]').tooltip({
  trigger: 'hover'
}).on('shown.bs.tooltip', function() {
  var link = $(this);
  var data = '';
  data += '<ul style="list-style-type:none;margin:0;padding:0;text-align:left;font-size:12px">';
  data += '	<li>Sherif Salah</li>';
  data += '	<li>Muhammad Salah</li>';
  data += '	<li>and a gazillion more...</li>';
  data += '</ul>';
  link.attr('data-original-title', data);
  setTimeout(function() {
    if (link.is(':hover')) {
      link.tooltip("dispose").tooltip("show");
    }
  }, 1000);
});
<!doctype html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet" />
</head>

<body>
  <div class="card">
    <div class="card-body text-center">
      <a href="JavaScript:void(0);" class="btn btn-sm btn-link" data-toggle="tooltip" data-placement="top" data-html="true" title="Loading...">gazillion</a>
    </div>
  </div>
  <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
</body>

</html>


0

Ben sadece bootstrap 4 & w / o arayarak test .show ()

el.tooltip('hide').attr('data-original-title', 'message');

-1

ajax isteği başarıyla döndüğünde, araç ipucunun başlığını değiştirmek ve araç ipucunu tekrar göstermek için bu kodu kullanabilirsiniz.

$(element).tooltip('hide');
$(element).attr('title','this is new title');
$(element).tooltip('fixTitle');
setTimeout(function() {  $(element).tooltip('show');}, 500);

-1

Bu kolay yolu kullanıyorum:

$(document).ready(function() {
    $("#btn").prop('title', 'Click to copy your shorturl');
});

function myFunction(){
  $(btn).tooltip('hide');
  $(btn).attr('data-original-title', 'Test');
  $(btn).tooltip('show');
});


-1
$(this).attr('data-original-title', 'click here to publish')
       .tooltip('fixTitle')
       .tooltip('show');

Bir araç ipucunun metnini attr 'data-original-title' ile başlatıldıktan sonra değiştirmeniz gerektiğinde kullanışlıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.