Hide native tooltip using jQuery

后端 未结 11 783
南旧
南旧 2020-12-01 05:00

Is there a way to hide the native tooltip action when a user hovers over a anchor tag with a title attribute? I don\'t want to remove it just don\'t display the nasty yellow

相关标签:
11条回答
  • 2020-12-01 05:24

    You can hook the 'mouseenter' event and return false which will stop the native tooltips from being displayed.

    $(selector).on( 'mouseenter', function(){ return false; });

    0 讨论(0)
  • 2020-12-01 05:27

    Apparently the title attribute doesn't fall under the normal event handler. Anyway, my original answer didn't work, though I'll keep playing with it to see if I can get it to work. If you need to retain the title attribute but don't want the popup effect, as indicated in your comments, then store the title attribute in the element's data and use it from there.

    $('[title]').each( function() {
        var $this = $(this);
        $this.data('title',$this.attr('title'));
        $this.removeAttr('title');
    });
    
    $('a').click( function() {
        var $this = $(this);
        var title = $this.data('title');
        ... do your other stuff...
    });
    

    Original answer:

    Give every element that has a title a specific hover over handler that prevents the default action.

    $('[title]').hover(
       function(e) {
           e.preventDefault();
       },
       function() { }
    );
    

    Except after testing it doesn't seem to work.

    0 讨论(0)
  • 2020-12-01 05:32

    The original poster only wanted to disable the native action of .tooltip(). If that is the case, use the following simple solution:

    $(function() {
        $( document ).tooltip({
            items: "[data-tooltip]",
            content: function() {
                var element = $( this );
                if ( element.is( "[data-tooltip]" ) ) {
                    return element.attr('data-tooltip');
                }
            }
        });
    });
    

    Now the [title] attribute is disabled and the tooltip will only trigger when an element has a [data-tooltip] attribute. By defining more 'items' you can create different behavior and styles:

    $(function() {
        $( document ).tooltip({
            items: "[data-tooltip],img[alt]",
            content: function() {
                var element = $( this );
                if ( element.is( "[data-tooltip]" ) ) {
                    return element.attr('data-tooltip');
                }
                if ( element.is( "[alt]" ) ) {
                    return element.attr('alt') + something_else;
                }
            }
        });
    });
    

    http://jqueryui.com/tooltip/#custom-content & http://api.jqueryui.com/tooltip/#option-items

    0 讨论(0)
  • 2020-12-01 05:33
    var title;
    $('a[title]').hover(function () {
       title = $(this).attr('title');
       $(this).attr('title','');
    }, function () {
       $(this).attr('title',title);
    });
    
    0 讨论(0)
  • 2020-12-01 05:34

    I used a variation on bEj ni c bEj's code, because I needed to preserve the title content on hover, but still needed to suppress the default behavior.

    // Suppress default tooltip behavior on hover
    var tempTitle = "";
    $('abbr[title],dfn[title],span.info-tip[title],').hover(
    function(e){
        e.preventDefault();
        tempTitle = $(this).attr('title');
    
        $(this).attr('title', '');
            // add attribute 'tipTitle' & populate on hover
            $(this).hover(
                function(){
                    $(this).attr('tipTitle', tempTitle);
                }
            );
        },
       // restore title on mouseout
       function() {
       $(this).attr('title', tempTitle);
       }
    );
    

    This allows me to do this in my stylesheet: /* abbr & tooltip styles: first, the immediate descendants of the content area are set to highlight abbreviations on hover, but avoiding lists; as we don't want *all* abbreviations highlighted when you hover on a root list */

    abbr,
    abbr[tipTitle],
    dfn,
    dfn[tipTitle],
    span.info-tip,
    span.info-tip[tipTitle] {
    border-bottom:none; /*remove border 1st, then let following rules add it back in*/
    }
    
    p:hover abbr[tipTitle],
    li:hover abbr[tipTitle],
    dl>*:hover abbr[tipTitle],
    label:hover abbr[tipTitle],
    p:hover dfn[tipTitle],
    li:hover dfn[tipTitle],
    dl>*:hover dfn[tipTitle],
    label:hover dfn[tipTitle],
    p:hover span.info-tip[tipTitle],
    li:hover span.info-tip[tipTitle],
    dl>*:hover span.info-tip[tipTitle],
    label:hover span.info-tip[tipTitle]
    {
    position: relative;
    text-decoration: none;
    border-bottom: 1px dotted #333;
    cursor: help;
    }
    
    p:hover abbr[tipTitle]:before,
    li:hover abbr[tipTitle]:before,
    dl>*:hover abbr[tipTitle]:before,
    label:hover abbr[tipTitle]:before,
    p:hover dfn[tipTitle]:before,
    li:hover dfn[tipTitle]:before,
    dl>*:hover dfn[tipTitle]:before,
    label:hover dfn[tipTitle]:before,
    p:hover span.info-tip[tipTitle]:before,
    li:hover span.info-tip[tipTitle]:before,
    dl>*:hover span.info-tip[tipTitle]:before,
    label:hover span.info-tip[tipTitle]:before {
    content: "";
    position: absolute;
    border-top: 20px solid #803808;
    border-left: 30px solid transparent;
    border-right: 30px solid transparent;
    visibility: hidden;
    top: -18px;
    left: -26px;
    }
    
    p:hover abbr[tipTitle]:after,
    li:hover abbr[tipTitle]:after,
    dl>*:hover abbr[tipTitle]:after,
    label:hover abbr[tipTitle]:after,
    p:hover dfn[tipTitle]:after,
    li:hover dfn[tipTitle]:after,
    dl>*:hover dfn[tipTitle]:after,
    label:hover dfn[tipTitle]:after,
    p:hover span.info-tip[tipTitle]:after,
    li:hover span.info-tip[tipTitle]:after,
    dl>*:hover span.info-tip[tipTitle]:after,
    label:hover span.info-tip[tipTitle]:after {
    content: attr(tipTitle);
    position: absolute;
    color: white;
    top: -35px;
    left: -26px;
    background: #803808;
    padding: 5px 15px;
    -webkit-border-radius: 10px;
    -moz-border-radius: 10px;
    border-radius: 10px;
    white-space: nowrap;
    visibility: hidden;
    }
    
    p:hover abbr[tipTitle]:hover:before,
    li:hover abbr[tipTitle]:hover:before,
    dl>*:hover abbr[tipTitle]:hover:before,
    label:hover abbr[tipTitle]:hover:before,
    p:hover dfn[tipTitle]:hover:before,
    li:hover dfn[tipTitle]:hover:before,
    dl>*:hover dfn[tipTitle]:hover:before,
    label:hover dfn[tipTitle]:hover:before,
    p:hover span.info-tip[tipTitle]:hover:before,
    li:hover span.info-tip[tipTitle]:hover:before,
    dl>*:hover span.info-tip[tipTitle]:hover:before,
    label:hover span.info-tip[tipTitle]:hover:before,
    p:hover abbr[tipTitle]:hover:after,
    li:hover abbr[tipTitle]:hover:after,
    dl>*:hover abbr[tipTitle]:hover:after,
    label:hover abbr[tipTitle]:hover:after,
    p:hover dfn[tipTitle]:hover:after,
    li:hover dfn[tipTitle]:hover:after,
    dl>*:hover dfn[tipTitle]:hover:after,
    label:hover dfn[tipTitle]:hover:after,
    p:hover span.info-tip[tipTitle]:hover:after,
    li:hover span.info-tip[tipTitle]:hover:after,
    dl>*:hover span.info-tip[tipTitle]:hover:after,
    label:hover span.info-tip[tipTitle]:hover:after {
    visibility: visible;
    transition: visibility 0s linear .3s;
    -moz-transition: visibility 0s linear .3s;
    }
    

    Giving me pretty tooltips where I need them, without the default tooltip appearing simultaneously.

    0 讨论(0)
提交回复
热议问题