【问题标题】:Jquery UI tooltip on disabled button禁用按钮上的 Jquery UI 工具提示
【发布时间】:2014-10-01 04:58:30
【问题描述】:

我正在尝试显示禁用按钮的工具提示。我不确定是否会为禁用元素触发 jquery 事件,但我正在尝试检查是否可以显示禁用项目的工具提示。我的例子是here

<p>Your age:
    <input id="age" title="We ask for your age only for statistical purposes.">
</p>
<p>
    <input type="button" title="This a test enabled button." value="hover me please">
</p>
    <p>
  <input type="button" disabled="disabled" title="This a test disabled button." value="hover me please">   </p>



$(function () {
    $(document).tooltip({
        position: {
            my: "center bottom-20",
            at: "center top",
            using: function (position, feedback) {
                $(this).css(position);
                $("<div>")
                    .addClass("arrow")
                    .addClass(feedback.vertical)
                    .addClass(feedback.horizontal)
                    .appendTo(this);
            }
        }
    });
});

【问题讨论】:

    标签: jquery jquery-ui tooltip jquery-ui-tooltip


    【解决方案1】:

    看起来不能保证正常工作。

    查看文档 (http://api.jqueryui.com/tooltip/):

    通常,禁用的元素不会触发任何 DOM 事件。因此,无法正确控制禁用元素的工具提示,因为我们需要监听事件以确定何时显示和隐藏工具提示。因此,jQuery UI 不保证对附加到禁用元素的工具提示提供任何级别的支持。不幸的是,这意味着如果您需要禁用元素的工具提示,您最终可能会混合使用原生工具提示和 jQuery UI 工具提示。

    编辑:解决此问题的一种方法是,不要将按钮设置为disabled,而是设置它的样式,使其看起来像是被禁用了。如果它是一个简单的按钮,这就是你所要做的,如果它是一个submit 按钮,你还必须阻止它提交表单。

    编辑#2:我尝试了上述解决方法,看起来opacity:0.5 几乎可以完成这项工作(来源:tjvantoll.com):

    .disabled-button {
        opacity: 0.5;
    }
    

    这是你更新的小提琴:http://jsfiddle.net/jkLzuh0o/3/

    【讨论】:

    • 我们可以覆盖tooltip css来实现功能吗?诸如 .ui-tooltip[disabled="disabled"] 之类的东西。
    • 看看我的编辑:认为最好的方法是尝试模仿按钮的禁用状态...
    • @webeno ,但你不认为这是作弊吗?
    • @webeno ,用户仍然可以点击该按钮。
    • 哈哈,“作弊”,取决于您想要获得什么... :) 是的,他们可以单击按钮,但除非它是 submit 按钮,或者您没有分配和处理程序/它的其他功能,什么都不会发生......最后,OP的目的是让工具提示出现......
    【解决方案2】:

    您可以使用 onclick="return false;" 而不是使用 disabled="disabled"然后事件仍然被触发并且工具提示将显示,但是当您单击按钮时没有任何反应。这也适用于复选框:)

    所以不要这样:

    <p>
      <input type="button" disabled="disabled" title="This a test disabled button." value="hover me please">
    </p>

    你写这个:

    <p>
      <input type="button" onclick="return false" title="This a test disabled button." value="hover me please">
    </p>

    【讨论】:

    • 酷。这对我来说是第一个选项,因为我希望禁用该按钮。
    • 这会在应用到任何中型或大型现有应用程序时产生噩梦
    【解决方案3】:

    作为一种解决方法,您可以使用未禁用的 HTML 元素封装按钮并在其上应用工具提示。

    这是我们在 Angular 上使用的示例,但您明白了。 HTML:

    <div ng-controller="MyCtrl">
    <br/>
    <br/>
    <br/>
    <div class="container">
        <div class="row">
            <div style="display: inline-block;" tooltip="My Tooltip"><input class="input-xxlarge" 
                type="text" ng-disabled="isDisabled" ng-model="myModel"/></div>
    
            <br/>
            Disable/Enable <input type="checkbox" ng-model="isDisabled"/>
    
        </div>
    </div>
    

    JS:

    var myApp = angular.module('myApp', ['ui.bootstrap']);
    
    function MyCtrl($scope) {
        $scope.myModel = "Tooltip only works when input is enabled.";
        $scope.isDisabled = false;
    
    }
    

    查看工作示例: http://jsfiddle.net/RWZmu/

    【讨论】:

      【解决方案4】:

      只需在按钮周围添加父容器并在那里设置工具提示属性,这样您的容器就会受到影响,而不是按钮。

      <div class="container" title="My tooltip">
          <input type="button" disabled="disabled" value="My button"/>
      </div>
      

      【讨论】:

      • 我会从 jQuery 中提取工具提示。对于这样简单的任务来说,这将是一个沉重的负担。你的例子也对我有用。
      猜你喜欢
      • 1970-01-01
      • 2016-06-15
      • 2018-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-08
      相关资源
      最近更新 更多