【问题标题】:KnockoutJS event binding on disabled Bootstrap 3 button with tooltip带有工具提示的禁用 Bootstrap 3 按钮上的 KnockoutJS 事件绑定
【发布时间】:2015-02-14 21:46:49
【问题描述】:

我需要在按钮上显示动态 Bootstrap 工具提示,说明该按钮被禁用的原因(即“填写您的姓名/地址/电话”或某些变体)。我正在为项目使用 Bootstrap/jQuery/KnockoutJS。

我在禁用按钮上显示引导工具提示时遇到问题,通过谷歌搜索发现这是由于没有触发底层按钮事件(由于按钮被禁用,引导工具提示不起作用. 哦!)。

我正在使用带有点击绑定的 KnockoutJS 来处理按钮事件。

问题:有谁知道在启用按钮并且包含特定CSS类(即btn-disabled ) - 这样不会调用 KnockoutJS 点击事件,但工具提示仍然显示?

无效代码示例:

请注意,使用enable:false data-bind 属性,工具提示将不会显示。我试图通过样式/事件处理重新创建行为,但并没有真正禁用控件:

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>

【问题讨论】:

  • 您正在寻找类似的东西jsfiddle.net/supercool/LkqTU/21274
  • 不完全是,它必须是 bootstrap 3 工具提示:getbootstrap.com/javascript/#tooltips
  • 我可以找个小提琴来测试你的问题吗
  • 哎呀,当我在内联发布代码时,我看到了你的小提琴评论;)
  • 我们可能需要编写一些技巧,因为我们在这里使用引导程序作为工具提示,实际上禁用这些事件不会触发(如上所述)。纯 html 在这种情况下没有问题。

标签: jquery css twitter-bootstrap knockout.js


【解决方案1】:

您是否忽略了文档的这一部分?:

Tooltips on disabled elements require wrapper elements

要将工具提示添加到disabled.disabled 元素,请将元素放在&lt;div&gt; 内,然后将工具提示应用于该&lt;div&gt;

【讨论】:

  • 哈,当我出于某种原因回复这个问题时,它让我想到 - 等一下,当我尝试 div 上的工具提示时,我是否记得调用 $("...").工具提示();在 div 上,其中 - 不,我没有。哎呀!这确实是固定的。谢谢!
【解决方案2】:

这可能不是最简洁的方式,但如果您的按钮在 ViewModel 中表示,它的状态也可以在 ViewModel 中表示:

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

或者,也许您可​​以使用按钮元素并最初给它一个像showTooltip 这样的类。每当按钮被禁用时,您都可以将其类切换为dontShowTooltip 之类的东西,并且您可以检查它在self.clickTest() 中具有哪个类。

这不会禁用按钮单击事件,但您可能不必这样做。

【讨论】:

  • 我唯一的问题是,我的所有点击处理程序都需要查看视图模型以确定按钮是否“启用”,如果是 - 做一些事情,它不是别。我试图找出可以避免这种情况的地方。不过谢谢,你上面提到的路线实际上是我的后备计划。
  • 我知道你在说什么 - 这感觉不像是一个干净的解决方案。但是,此方法可能MVVM patterns 一致,因为您的客户端 ViewModel 将描述视图上按钮/工具提示的功能。 This link might help 如果你不想走那条路。我希望这会有所帮助——请接受我的建议。我是初学者!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多