2015-04-19 5 views
3

Я хочу создать ручную всплывающую подсказку, основанную на некотором пользовательском вводе. Самый простой способ - скрыть все всплывающие подсказки, а затем показать соответствующие.Всплывающая подсказка Bootstrap исчезает после второго «шоу»

Я уменьшил свой код до простых предметов, и моя всплывающая подсказка продолжает исчезать после второго «шоу».

Я использую самозагрузки 3.3.4 и JQuery 2.1.3

Есть проблема с делать шоу немедленно после шкурки или я что-то отсутствую в моем коде?

<input id="check" type="checkbox"> 

<script> 
    var toolTipData = { 
    placement: 'right', 
    title: 'Checkmark checked', 
    trigger: "manual" 
}; 
$('#check').tooltip(toolTipData); 

$(document).on('change', '#check', function() { 
    $('#check').tooltip("hide"); 
    if (document.getElementById("check").checked) { 
     $('#check').tooltip("show"); 
    } 
}); 
</script> 

Вот jsfiddle: https://jsfiddle.net/bbrally/4b9g0abh/

ответ

3

Вы испытываете условие гонки между тем, когда происходит событие «скрыть» и когда происходит событие «показать». По документам события «скрыть/показать» действительно возвращаются к вызывающему абоненту до того, как загорится «скрытый/показанный».

http://getbootstrap.com/javascript/#tooltips Прокрутите вниз до раздела «Методы» под подсказках ... возврат к вызывающему перед тем Тултип фактически были скрыты ...

... Возврат к вызывающему Перед Тултип на самом деле было показано ...

Я не предлагаю ниже код является решением (хотя, это может быть достаточно хорошо?), но explanati о том, к чему вы клоните. В частности, значение тайм-аута 250 мс замедлит его настолько, что оно будет работать так, как вы планируете.

var toolTipData = { 
     placement: 'right', 
     title: 'Checkmark checked', 
     trigger: "manual" 
    }; 
    $('#check').tooltip(toolTipData); 

    $(document).on('change', '#check', function() { 
     $('#check').tooltip("hide"); 
     if (document.getElementById("check").checked) { 
      setTimeout(function() { 
       $('#check').tooltip("show"); 
      }, 250); 
     } 
    }); 

Надеюсь, что это поможет.

+0

Спасибо за объяснение. Я действительно не понимал, что означает «возвращение к вызывающему», и не был уверен, что это происходит, когда все идет не так, но теперь я знаю. Возможно, я рассмотрю переписывание логики моего кода, чтобы использовать if/else более эффективно. – bbrally

+0

Np, Рад, что я могу помочь! – Shawn

2
$(document).on('change', '#check', function() { 
    if (document.getElementById("check").checked) { 
     $('#check').tooltip("show"); 
    } 
    else{ 
     $('#check').tooltip("hide"); 
    } 
}); 

Он пытался скрыть, даже если она не должна разделять оба случая.

+0

Это действительно работает, но моя полная программа проверяет многие условия в разных частях моего кода. «сокрытие» всех, а затем «показ» применимых, казалось, было менее громоздким, чем множество утверждений if/else. – bbrally

Смежные вопросы