2014-12-16 4 views
4

Мне нужно показать динамическую подсказку Bootstrap на кнопке, которая объясняет, почему кнопка отключена (например, «Заполните свое имя/адрес/телефон» или какой-либо вариант). Я использую Bootstrap/jQuery/KnockoutJS для проекта.KnockoutJS привязка событий к отключенной кнопке Bootstrap 3 с подсказкой

У меня возникли проблемы с отображением всплывающей подсказки Bootstrap на отключенной кнопке и обнаружены через какой-то Google, поскольку это связано с тем, что основные события кнопки не запускаются (поскольку кнопка отключена, всплывающая подсказка Bootstrap не Д'о!).

Я использую KnockoutJS с привязками кликов для обработки событий кнопок.

Issue: Кто-нибудь знает чистой/емким образом, чтобы отключить кнопку щелчка события, когда кнопка включена и содержит определенный класс CSS (т. Е btn-disabled) - так что KnockoutJS нажмите событие не вызывается , но всплывающая подсказка все же появляется?

Пример неработающего кода:

Обратите внимание, что с помощью атрибута enable:false данных связывания, подсказка не будет отображаться. Я пытался воссоздать поведение при обработке стиль/событий, но на самом деле не отключить контроль:

HTML:

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css"> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap-theme.min.css"> 
    <script src="//code.jquery.com/jquery-1.11.0.min.js"></script> 
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script> 
    <script src="http://knockoutjs.com/downloads/knockout-3.2.0.js"></script> 

...

<button id="testButton" 
      class="btn btn-default" 
      data-bind="click: clickTest, enable:false" 
      data-toggle="tooltip" 
      data-placement="left" 
      data-original-title="Test tool tip"> 
     Test Button 
    </button> 

Сценарий:

<script type="text/javascript"> 

    function TestViewModel() { 
     var self = this;   
     self.clickTest = function() { 
      console.debug("Test button has been clicked"); 
     }; 
    } 

    var testViewModel = new TestViewModel(); 

    $(document).ready(function() { 
     $('#testButton').tooltip(); 
     console.debug("document ready"); 
     ko.applyBindings(testViewModel);   
    }); 

</script> 
+0

вы ищете что-то вроде этого http://jsfiddle.net/supercool/LkqTU/21274/ –

+0

Не совсем, это должен быть самозагрузки 3 подсказка: HTTP: // getbootstrap.com/javascript/# подсказки – Sean

+0

Могу ли я получить скрипку, чтобы проверить вашу проблему? –

ответ

3

ли Вы пропускаете эту секцию документации ?:

Tooltips on disabled elements require wrapper elements

Чтобы добавить всплывающую подсказку к элементу disabled или .disabled, поместить элемент внутри <div> и применить подсказку к этому <div> вместо.

+0

Нет, я видел это - не повезло с тем, что на самом деле работает. – Sean

+0

@Sean Работы для меня: http://jsfiddle.net/1L5r2cw1/ – cvrebert

+0

Hah, когда я ответил на это, почему-то это заставило меня подумать - подождите секунду, когда я попробовал всплывающую подсказку на div, я не помню, чтобы вызов $ ("..."). tooltip(); на div, который - нет, я этого не делал. Упс! Это действительно было исправлено. благодаря! – Sean

0

Это не может быть чистым способом, но если ваша кнопка представлена ​​в вашем ViewModel, его состояние может быть представлены в ViewModel, а также:

var self = this; 
var buttonIsDisabled = ko.observable('true'); 
self.clickTest = function() { 
    if (self.isDisabled()) { 
     $('#testButton').tooltip('show') 
    } 
} 

В качестве альтернативы, может быть, вы могли бы взять элемент кнопки и сначала дать ему класс, такой как showTooltip. Всякий раз, когда кнопка отключается, вы можете переключить ее класс на что-то вроде dontShowTooltip, и вы можете проверить, какой класс у него есть в self.clickTest().

Это не отключит событие нажатия кнопки, но вам может и не понадобиться.

+0

Моя единственная проблема с этим, тогда все мои обработчики кликов должны посмотреть на модель представления, чтобы определить, включена ли кнопка «включено» или нет, если она есть - сделайте что-нибудь, это не так. Я пытаюсь выяснить, где я могу этого избежать. Спасибо, однако, маршрут, о котором вы говорили выше, на самом деле был моим планом возврата. – Sean

+0

Я знаю, о чем вы говорите - это не похоже на чистое решение. Этот метод * может быть совместим с [шаблонами MVVM] (http://stackoverflow.com/questions/5421874/basic-concepts-of-mvvm-what-should-a-viewmodel-do), поскольку ваша ViewModel на стороне клиента будет описывать функциональность кнопок/подсказок в представлении. [Эта ссылка может помочь] (http://stackoverflow.com/questions/13311574/how-to-enable-bootstrap-tooltip-on-disabled-button), если вы не хотите идти по этому маршруту. Надеюсь, это поможет - и, пожалуйста, посоветуйте мне с солью. Я новичок! – alex

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