คำแนะนำเครื่องมือของ Bootstrap ไม่หายไปหลังจากคลิกปุ่มและวางเมาส์


115

ฉันมีปัญหากับคำแนะนำเครื่องมือของ bootstrap: เมื่อฉันคลิกที่ปุ่มคำแนะนำเครื่องมือจะยังคงอยู่แม้ว่าเคอร์เซอร์จะอยู่นอกปุ่มก็ตาม ฉันได้ดูคู่มือ - เคล็ดลับเครื่องมือของ Bootstrapแล้วและหากฉันคลิกที่ปุ่มต่างๆฉันพบปัญหาเดียวกัน มีวิธีแก้ไขปัญหานี้หรือไม่? เพิ่งลองใน FF, IE ล่าสุด


มันไม่ทำงานในลิงค์ในคำถามของฉันด้วยลองดูที่นั่น มีปัญหาเดียวกันคือ
SilentCry

คำตอบ:


241

ทั้งนี้เนื่องจากtriggerไม่ได้ตั้งค่า ค่าเริ่มต้นสำหรับทริกเกอร์คือ'hover focus'ดังนั้นคำแนะนำเครื่องมือจะยังคงมองเห็นได้หลังจากคลิกปุ่มจนกว่าจะคลิกปุ่มอื่นเนื่องจากปุ่มดังfocusedกล่าวเป็น

ดังนั้นสิ่งที่คุณต้องทำคือกำหนดtriggerให้เป็น'hover'เท่านั้น ด้านล่างตัวอย่างเดียวกับที่คุณได้เชื่อมโยงโดยไม่มีคำแนะนำเครื่องมือหลังจากคลิกปุ่มแล้ว:

$('[data-toggle="tooltip"]').tooltip({
    trigger : 'hover'
})  

ตัวอย่างเอกสารในซอ -> http://jsfiddle.net/vdzvvg6o/


1
ขอบคุณเดวิดที่ใช้งานได้จริง ฉันเข้าใจตัวเลือกทริกเกอร์สำหรับคำแนะนำเครื่องมือผิดในตอนนี้ฉันพูดถูก
SilentCry

1
@SilentCry โปรดทราบว่าคุณกำลังกำหนดเป้าหมายไปที่ใครการเรียกใช้ "โฮเวอร์" อาจไม่ใช่เรื่องง่าย / ทั่วไปเสมอไป
phk

3
@davidkonrad แพลตฟอร์มมือถือผู้ใช้ตาบอด อาจอธิบายได้ด้วยว่าทำไมพวกเขาจึงตั้งค่า 'hover focus' เป็นค่าเริ่มต้น
phk

2
@phk bootstrap มีปัญหาทั่วไปโดยไม่ใช่มือถือเป็นอันดับแรกเกี่ยวกับคนตาบอดเราควรใช้ aria-attributes BTW เป็นเครื่องมือที่ยอดเยี่ยมสำหรับการทดสอบความสามารถในการใช้งานที่พัฒนาขึ้นสำหรับหน่วยงานของแคนาดาที่มี "ระดับ" หลายระดับที่คุณสามารถทำได้ -> achecker.ca/checker/index.phpประเทศของฉันไม่มีมาตรฐานเหล่านี้ แต่ก็คุ้มค่าที่จะรักษาไว้ อย่างไรก็ตาม.
davidkonrad

1
คุณอาจต้องการดูคำตอบของ Karmonik Cola ด้านล่าง มันแสดงคำแนะนำเครื่องมือเกี่ยวกับโฟกัสอยู่เสมอ
David Stosik

63

ฉันรู้ว่าอายุมากกว่าหนึ่งปี แต่ฉันไม่สามารถใช้สิ่งนี้กับตัวอย่างใด ๆ ที่นี่ได้ ฉันต้องใช้สิ่งต่อไปนี้:

$('[rel="tooltip"]').on('click', function () {
    $(this).tooltip('hide')
})

นอกจากนี้ยังแสดงคำแนะนำเครื่องมืออีกครั้งเมื่อวางเมาส์เหนือ


1
สิ่งนี้จะต้องเป็นคำตอบที่ยอมรับและควรนำไปใช้ใน bootstrap codebase
kjdion84

5
สิ่งนี้มีประโยชน์อย่างมากสำหรับคำแนะนำเครื่องมือ bootstrap ที่วางอยู่บนปุ่มที่มีทริกเกอร์ 'โฮเวอร์' ซึ่งทำให้เกิดโพสต์แบ็คแบบอะซิงโครนัส (เช่นแผงโมดอลการแสดงผล) หากไม่มีสิ่งนี้โพสต์แบ็คจากการกดปุ่มจะทำให้คำแนะนำเครื่องมือ "ค้าง" และไม่หายไป
bradykey

1
ในกรณีของฉันฉันปิดใช้งานปุ่มส่งในขณะที่มีการดำเนินการ ajax ในขณะที่กระบวนการ ajax กำลังทำงานคำแนะนำเครื่องมือจะยังคงอยู่เนื่องจากปุ่มถูกปิดใช้งาน เมื่อกระบวนการ ajax เสร็จสมบูรณ์ปุ่มจะ "พร้อมใช้งาน" อีกครั้ง การวางเมาส์เหนือปุ่มแล้วปิดจะเป็นการปิดคำแนะนำเครื่องมือ วิธีแก้ปัญหาของ Nitai แก้ไขทุกอย่าง ตอนนี้คำแนะนำเครื่องมือจะซ่อนเมื่อคลิกและยังคงใช้งานได้เมื่อเลื่อนปุ่มกลับมาทำงานอีกครั้ง
HPWD

ฉันเห็นด้วยกับ @ kjdion84 ฉันดิ้นรนจนเจอสิ่งนี้
Ahmad

9

สวัสดีฉันมีวิธีแก้ปัญหาเล็กน้อยสำหรับปัญหานี้ เมื่อโซลูชันอื่นใช้ไม่ได้ผลให้ลองวิธีนี้:

$('body').tooltip({
        selector: '[data-toggle="tooltip"], [title]:not([data-toggle="popover"])',
        trigger: 'hover',
        container: 'body'
    }).on('click mousedown mouseup', '[data-toggle="tooltip"], [title]:not([data-toggle="popover"])', function () {
        $('[data-toggle="tooltip"], [title]:not([data-toggle="popover"])').tooltip('destroy');
    });

นี่เป็นวิธีแก้ปัญหาสำหรับการลากและวางด้วย ฉันหวังว่านี่จะช่วยใครสักคน :)


ฉันมีปัญหากับปุ่มกริด Telerik Kendo เท่านั้น เมื่อฉันคลิกหนึ่งคำแนะนำเครื่องมือจะไม่ซ่อน สิ่งนี้แก้ไขได้!
John81

8

ในกรณีของฉันปัญหาเกิดขึ้นใน Internet Explorer เท่านั้น: ไม่ว่าองค์ประกอบใด (อินพุต, div ฯลฯ ... ) จะมีคำแนะนำเครื่องมือหากคลิกแล้ว - คำแนะนำเครื่องมือยังคงแสดงอยู่

พบวิธีแก้ปัญหาบางอย่างบนเว็บที่แนะนำ. ซ่อน () คำแนะนำเครื่องมือนั้นเกี่ยวกับองค์ประกอบคลิกเหตุการณ์ - แต่มันเป็นความคิดที่ไม่ดี - กลับไปที่องค์ประกอบเดียวกัน - ซ่อนไว้ ... ในกรณีของฉัน

$('.myToolTippedElement').on('click', function () {
    $(this).blur()
})

สร้างความมหัศจรรย์ทั้งหมด !!! - โดยที่. myToolTippedElement เป็นองค์ประกอบที่มีคำแนะนำของหลักสูตร ...


ได้ผลสำหรับฉันเช่นกันและมีข้อได้เปรียบเหนือโซลูชันที่ยอมรับในการแสดงคำแนะนำเครื่องมือในโฟกัส
David Stosik

3

ในเชิงมุม 7 พร้อม bootstrap 4 และ jquery ฉันพบสิ่งนี้และใช้งานได้ดี ฉันใช้การกำจัดเพราะมันทำลายไม่ได้ซ่อนคำแนะนำเครื่องมือ

  ngAfterViewChecked() {
    $('[data-toggle="tooltip"]').tooltip({
      trigger: 'hover'
    });
    $('[data-toggle="tooltip"]').on('mouseleave', function () {
      $(this).tooltip('dispose');
    });
    $('[data-toggle="tooltip"]').on('click', function () {
      $(this).tooltip('dispose');
    });
   }

2

ลองใช้rel="tooltip"แทนdata-toggle="tooltip"สิ่งที่ได้ผลในกรณีของฉัน ฉันใช้ data-toggle="tooltip"และตั้งเงื่อนไขทริกเกอร์เป็นโฮเวอร์ซึ่งไม่ได้ผลในกรณีของฉัน เมื่อฉันเปลี่ยนตัวเลือกข้อมูลก็ใช้งานได้

รหัส HTML:

<button id="submit-btn" type="submit" class="btn btn-success" rel="tooltip" title="Click to submit this form">Submit</button>

รหัส JS // Tooltip $ ('. btn'). tooltip ({trigger: 'hover'});

สิ่งนี้จะลบคำแนะนำเครื่องมือที่ติดอยู่ออกไปอย่างแน่นอน


2

คำตอบของเดวิดข้างต้นช่วยแก้ไขปัญหาของฉัน ฉันมีทั้งเหตุการณ์ที่วางเมาส์และคลิกบนปุ่ม Firefox บน MAC ทำงานได้ตามที่ฉันต้องการ นั่นคือแสดงคำแนะนำเครื่องมือเมื่อวางเมาส์ไม่ต้องแสดงคำแนะนำเครื่องมือสำหรับการคลิก บนเบราว์เซอร์และระบบปฏิบัติการอื่น ๆ เมื่อฉันคลิกคำแนะนำเครื่องมือจะปรากฏขึ้นและอยู่ตามที่แสดง แม้ว่าฉันจะเลื่อนเมาส์ไปที่ปุ่มอื่นเพื่อวางเมาส์ นี่คือสิ่งที่ฉันมี:

$('[data-toggle="tooltip"]').tooltip({placement: 'right', html: true}); 

นี่คือการแก้ไข:

$('[data-toggle="tooltip"]').tooltip({placement: 'right', html: true, trigger: 'hover'}); 

2

นอกจากนี้คุณสามารถเพิ่ม:

onclick="this.blur()"

1
สิ่งนี้แตกต่างจากที่ Kamornik Cola เสนออย่างไร (ยกเว้นการนำไปใช้โดยไม่มี jQuery)? ฉันขอแนะนำให้เพิ่มคำอธิบายสำหรับคำตอบเพื่อเป็นประโยชน์ ขอแสดงความนับถือ
YakovL

2

โซลูชันการทำงาน

$(document).on("click",function()
    {
    setTimeout(function()
    {

  $('[data-toggle="tooltip"]').tooltip('hide');

},500);    // Hides tooltip in 500 milliseconds
    });

แม้ว่ารหัสนี้อาจตอบคำถาม แต่การให้บริบทเพิ่มเติมเกี่ยวกับสาเหตุและ / หรือวิธีที่รหัสนี้ตอบคำถามช่วยเพิ่มมูลค่าในระยะยาว
Adam

@Adam ฉันไม่พบโซลูชันที่ใช้งานได้ในฟอรัมเพื่อซ่อนคำแนะนำเครื่องมือหลังจากคลิก <a> <button> หรือองค์ประกอบอื่น ๆ ที่มีการทำงานของปุ่มหรือลักษณะที่แนบมา
อัลฟา

1

วิธีที่ฉันแก้ไขปัญหานี้คือการลบคำแนะนำเครื่องมือในฟังก์ชันคลิกเหตุการณ์โดยใช้รหัสต่อไปนี้:

$("#myButton").on("click", function() {
    $("div[role=tooltip]").remove();
});

1
คุณสามารถขอคำแนะนำเครื่องมืออีกครั้งเมื่อวางเมาส์เหนือได้หรือไม่
วิษณุ

0

ฉันใช้คำแนะนำเครื่องมือ bootstrap ใน cycle.js และไม่มีวิธีใดที่ใช้ได้ผลสำหรับฉัน

ฉันต้องทำสิ่งนี้:

return button( selector + '.btn.btn-sm', 
             {
               hook: {
                 destroy: tooltipOff,
                 insert:  toggleTooltipOn,
               },
....

function toggleTooltipOn(vnode){
  setupJQuery();  
  jQuery[0].$( vnode.elm )
    .tooltip({container:'body', trigger: 'hover');
//container:body is to help tooltips not wiggle on hover
//trigger:hover is to only trigger on hover, not on click
}

function tooltipOff( vnode ){
  setupJQuery();      
  jQuery[0].$( vnode.elm ).tooltip('hide');
}

0

สิ่งนี้ใช้ได้กับฉัน:

$(document).ready(function() {
   $('#save').tooltip({
            trigger : 'hover'
        }) ;

});

ฉันปิดการใช้งานปุ่มบันทึกแบบไดนามิกแล้วปัญหาคือ


นี่คือรหัสของปุ่มของฉัน
Devendra Singraul


0

วิธีนี้ใช้ได้ผลสำหรับฉัน

$('a[data-toggle="tooltip"]').tooltip({
  animated: 'fade',
  placement: 'bottom',
  trigger: 'click'
});

$('a[data-toggle="tooltip"]').click(function(event){
  event.stopPropagation();
});

$('body').click(function(){
  $('a[data-toggle="tooltip"]').tooltip('hide');
});

ซอ

ฉันลองใช้วิธีแก้ปัญหาส่วนใหญ่ที่ให้ไว้ในคำตอบก่อนหน้านี้ แต่ไม่มีวิธีใดได้ผลสำหรับฉัน


0

ปัญหาของฉันอยู่ใน DataTable รหัสด้านล่างใช้ได้กับฉัน

columnDefs: [ { targets: 0, data: "id", render: function (data, type, full, meta) { return '<a href="javascript:;" class="btn btn-xs btn-default" data-toggle="tooltip" title="Pending" data-container="body"><i class="fa fa-check"></i></a>'; } } ], drawCallback: function() { $('[data-toggle="tooltip"]').tooltip(); $('[data-toggle="tooltip"]').on('click', function () { $(this).tooltip('hide'); }); }


0

คุณยังสามารถใช้วิธีการด้านล่างเพื่อซ่อนคำแนะนำเครื่องมือบนmouseleaveดังต่อไปนี้:

jQuery("body").on("mouseleave", ".has-tooltip", function(){
    jQuery(this).blur();
});

0

ในกรณีของฉันสำหรับสิ่งนี้คือการแก้ไข:

beforeDestroyingElement() {    
  $('[data-toggle="tooltip"]').tooltip('hide');
}

ฉันไม่ได้ปฏิบัติตามกฎนี้จากเอกสาร Bootstrap:

ต้องซ่อนคำแนะนำเครื่องมือก่อนที่จะนำองค์ประกอบที่เกี่ยวข้องออกจาก DOM


0

สิ่งนี้สามารถทำได้ใน HTML โดยเพิ่มสิ่งต่อไปนี้:

 data-trigger="hover"

 <button type="button" data-toggle="tooltip" data-placement="top" data-trigger="hover" title="To re-enable scanning, click here">Text</button>

น่าเสียดายที่วิธีนี้ใช้ไม่ได้และคำแนะนำเครื่องมือยังคงติดอยู่
Fwd079

0

นอกจากนี้คุณสามารถใช้วิธีนี้กับเวอร์ชันเก่าได้เนื่องจากคำตอบที่ยอมรับไม่ได้ผลสำหรับฉันและฉันเขียนโค้ดนี้เพื่อตัวฉันเองและมันก็ใช้ได้ดี

$(document).on('mousedown', "[aria-describedby]", function() {
    $("[aria-describedby]").tooltip('hide');
});

0

หากมีคนต้องการตั้งค่าคำแนะนำเครื่องมือซึ่งจะแสดงเป็นระยะเวลาหนึ่งหลังจากคลิกนี่คือวิธีที่ฉันทำ:

$('[data-toggle="tooltip"]').tooltip({
trigger : 'click'})  

$('[data-toggle="tooltip"]').on('shown.bs.tooltip', function () {
$(this).tooltip('hide')
})

0

การใช้การบังคับเบลอ () มีศักยภาพในการลดประสบการณ์ของผู้ใช้ ฉันจะไม่ทำอย่างนั้น ฉันพบว่าการลบ "data-original-title" รวมทั้งการลบแอตทริบิวต์ "data-toggle" และ "title" นั้นใช้ได้ผลกับฉัน

    $(id).tooltip('hide');
    $(id).removeAttr("data-toggle");
    $(id).removeAttr("data-original-title");
    $(id).removeAttr("title");
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.