7

我一直在尝试使用 jQuery 制作非常简单的 javascript 工具提示,但我遇到了障碍。这个想法是spandiv. 该span元素将包含一个div带有小 html(图像和链接)的工具提示。单击元素时应打开工具提示,单击span元素外部或工具提示外部时应关闭工具提示。

到目前为止,打开工具提示不是问题,但关闭是问题。

<!DOCTYPE HTML>
<html>
<head>
    <title></title>

    <style>
        #colors > div {
            background-color: red;
            height: 50px;
            width: 50px;
            margin: 5px;
        }

        #colors > div > span {
            min-height: 10px !important;
            min-width: 10px !important;
            border: 3px solid black;
            position: relative;
        }

        .tooltip {
            border: 2px solid blue;
            display: none;
        }
    </style>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
    <script>
        $(function () {
            // generate boxes and tooltips
            for (var i = 0; i < 9; i++) {
                $('#colors').append('<div id="' + i + '"><span><div class="tooltip"><a href="#">add to favorites</a></div></span></div>');
            }

            $('#colors').delegate('span', 'click', function (event) {
                $(this).children('.tooltip').css({position:'absolute', top:'5px', left:'5px'}).fadeIn();
                // bottom one won't work
                //event.stopPropagation();
            });

            $(document).delegate('body', 'click', function (event) {
                var that = this
                $.each($('.tooltip'), function (index, element) {
                    // it's always visible ...
                    //if ($(element).is(':visible')) {

                    // doesn't work either
                    if ($(element).is(':visible') && $(element).has(event.target).length === 0) {
                        var s = event.target;

                        console.log([($(s) == event.target), event.target, index, element, $(element).has(event.target).length, that]);
                    }
                });
            });
        })
    </script>
</head>
<body>
<div id="colors"></div>
</body>
</html>

如果单击在工具提示之外,我似乎找不到关闭工具span提示的方法。

4

5 回答 5

5

要关闭工具提示,您需要调用

$('.tooltip').remove();

在您的场景中尝试

$.each($('.tooltip'), function (index, element) {
    $(this).remove();
 });
于 2012-08-07T07:46:26.020 回答
5

像这样的东西应该可以正常工作:)

 $(document).mouseup(function (e)
 {
     var container = $("YOUR CONTAINER SELECTOR");

     if (container.has(e.target).length === 0)
     {
        container.hide();
     }
 });
于 2012-08-07T07:58:30.983 回答
1

我为自己的网站调查了这个问题,但没有找到任何合适的解决方案,所以我自己写了。我的用例与 OP 有点不同,但可能会帮助其他人搜索相同的术语。我需要一个只出现在移动平台上的紧密链接。这很有用,因为在桌面上,当您mouseout离开目标元素时工具提示将关闭,但在触摸平台上它会一直存在。

// Set up tool tips for images and anchors.
$( document ).tooltip({
  items: "a[title], img[alt], .toolTip[title], :not(.noToolTip)",
    track: true,
    position: { my: "left+15 center", at: "right center" },
   content: function() {
      var element = $( this );
      var closer = closerLink = '';
      if (isMobile()) {
         closer = ' <br><div onClick="$(this).parent().parent().remove();" style="color: blue; text-decoration: underline; text-align: right;">Close</div>';
         closerLink = ' <br>Tap link again to open it.<br><div onClick="$(this).parent().parent().remove();" style="color: blue; text-decoration: underline; text-align: right;">Close</div>';
      }
      // noToolTip means NO TOOL TIP.
      if ( element.is( ".noToolTip" ) ) {
         return null;
      }
      // Anchor - use title.
      if ( element.is( "a[title]" ) ) {
         return element.attr( "title" ) + closerLink;
      }
      // Image - use alt.
      if ( element.is( "img[alt]" ) ) {
         return element.attr( "alt" ) + closer;
      }
      // Any element with toolTip class - use title.
      if ( element.is( ".toolTip[title]" ) ) {
         return element.attr( "title" ) + closer;
      }
   }
});

function isMobile() {
   return (/iPhone|iPod|iPad|Android|BlackBerry/).test(navigator.userAgent);
}

我在这里针对三种类型的东西:

  • 使用属性锚定标签 ( a) 。title
  • img带有title属性的图像标签 ( )。
  • 任何具有 class 的元素toolTip
  • 并明确排除任何带有 class 的元素noToolTip

我在这里写了这个:JQuery UI tooltip with a close link for mobile

于 2015-06-18T13:44:25.913 回答
1

生成工具提示时,将结果保存到变量中。您可以在关闭所有工具提示后使用它。

var tooltips = $(document).tooltip({
    // all kind of initilization options like position, open, hide, etc.
});

// ... app logic ...

tooltips.tooltip('close') // will close all tooltips

从这里获得信息:https ://jqueryui.com/tooltip/#forms

于 2018-09-07T12:08:11.077 回答
-3
 $(document).mouseup(function (kamesh)
 {
     var container = $("YOUR CONTAINER SELECTOR");

     if (container.has(kamesh.target).length === 0)
     {
        container.hide();
     }
 });
于 2016-06-09T09:31:15.167 回答