web-dev-qa-db-ja.com

クリック時にツールチップを表示するjQueryUIツールチップウィジェット

新しいjQueryUIのツールチップウィジェットを変更して、ドキュメント上の特定の要素のクリックイベントでツールチップを開き、他の要素はmouseoverイベントでtootipを表示する方法。クリックオープンの場合、ドキュメントのどこかをクリックしてツールチップを閉じる必要があります。

これはまったく可能ですか?

10
besq

前の答えはjqueryuiとその非常に複雑なものを使用していません。

これは動作します:

HTML:

<div id="tt" >Test</div>

JS:

$('#tt').on({
  "click": function() {
    $(this).tooltip({ items: "#tt", content: "Displaying on click"});
    $(this).tooltip("open");
  },
  "mouseout": function() {      
     $(this).tooltip("disable");   
  }
});

http://jsfiddle.net/adamovic/A44EB/ を使用して確認できます

27
Mladen Adamovic

このコードは、ツールチップの外側をクリックするまで開いたままになるツールチップを作成します。ツールチップを閉じた後でも機能します。 Mladen Adamovic's answer の詳細です。

フィドル: http://jsfiddle.net/c6wa4un8/57/

コード:

var id = "#tt";
var $elem = $(id);

$elem.on("mouseenter", function (e) {
    e.stopImmediatePropagation();
});

$elem.tooltip({ items: id, content: "Displaying on click"});

$elem.on("click", function (e) {
    $elem.tooltip("open");
});


$elem.on("mouseleave", function (e) {
    e.stopImmediatePropagation();
});


$(document).mouseup(function (e) {
    var container = $(".ui-tooltip");
    if (! container.is(e.target) && 
        container.has(e.target).length === 0)
    {
        $elem.tooltip("close");
    }
});
11
Marco Sulla

この答えは、さまざまなクラスでの作業に基づいています。クラス 'trigger'の要素でクリックイベントが発生すると、クラスは 'trigger on'に変更され、mouseenterイベントがトリガーされてjquery uiに渡されます。

この例では、クリックアウトに基づいてすべてを作成するために、Mouseoutがキャンセルされます。

HTML

<p>
<input id="input_box1" />
<button id="trigger1" class="trigger" data-tooltip-id="1"  title="bla bla 1">
?</button>
</p>
<p>
<input id="input_box2" />
<button id="trigger2" class="trigger" data-tooltip-id="2"  title="bla bla 2">
?</button>
</p>

jQuery

$(document).ready(function(){ 
$(function () {
//show
$(document).on('click', '.trigger', function () {
    $(this).addClass("on");
    $(this).tooltip({
        items: '.trigger.on',
        position: {
            my: "left+15 center",
            at: "right center",
            collision: "flip"
        }
    });
    $(this).trigger('mouseenter');
});
//hide
$(document).on('click', '.trigger.on', function () {
    $(this).tooltip('close');
    $(this).removeClass("on")
});
//prevent mouseout and other related events from firing their handlers
$(".trigger").on('mouseout', function (e) {
    e.stopImmediatePropagation();
});
})
})

http://jsfiddle.net/AK7pv/111/

6
Dimi

私は今日この問題で遊んでいます、私は自分の結果を共有すると思いました...

JQueryUIツールチップ、カスタムスタイル、およびカスタムコンテンツの例を使用する

私はこれら2つのハイブリッドを望んでいました。ツールチップではなくポップオーバーを使用できるようにしたかったため、コンテンツはカスタムHTMLである必要がありました。したがって、ホバー状態ではなく、クリック状態になります。

私のJSは次のようなものです:

       $(function() {
        $( document ).tooltip({
            items: "input",
            content: function() {
                return $('.myPopover').html();
            },
            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 );
                }
            }
        });

        $('.fireTip').click(function () {
            if(!$(this).hasClass('open')) {
                $('#age').trigger('mouseover');
                $(this).addClass('open');
            } else {
                $('#age').trigger('mouseout');
                $(this).removeClass('open');
            }

        })

    });

最初の部分は、多かれ少なかれ、ツールチップブロックにアイテムとコンテンツを追加したUIサイトからのコード例の直接コピーです。

私のHTML:

   <p> 
       <input class='hidden' id="age"  /> 
       <a href=# class="fireTip">Click me ya bastard</a>
   </p>

  <div class="myPopover hidden">
       <h3>Hi Sten this is the div</h3>
  </div>

基本的に、アンカータグ(fireTipクラス)をクリックしたときにホバー状態をだます。ツールチップを保持する入力タグには、マウスオーバー状態が呼び出されます。フィドル...

とにかく、相互作用をもう少しよく見るためのフィドルがあります: http://jsfiddle.net/AK7pv/

5
Sten Muchow

更新Mladen Adamovicの回答には1つの欠点があります。一度だけ動作します。次に、ツールチップが無効になります。クリックするたびにツールヒントを有効にすることでコードを補足する必要があるたびに機能させることができます。

 $('#tt').on({
  "click": function() {
    $(this).tooltip({ items: "#tt", content: "Displaying on click"});
    $(this).tooltip("enable"); // this line added
    $(this).tooltip("open");
  },
  "mouseout": function() {      
     $(this).tooltip("disable");   
  }
});
3
piradian

このバージョンでは、ユーザーがマウスをツールチップ上に移動し、マウスアウトするまでツールチップを表示し続けることができます。ユーザーがツールチップからテキストを選択できるようにするのに便利です。

$(document).on("click", ".tooltip", function() {
    $(this).tooltip(
        { 
            items: ".tooltip", 
            content: function(){
                return $(this).data('description');
            }, 
            close: function( event, ui ) {
                var me = this;
                ui.tooltip.hover(
                    function () {
                        $(this).stop(true).fadeTo(400, 1); 
                    },
                    function () {
                        $(this).fadeOut("400", function(){
                            $(this).remove();
                        });
                    }
                );
                ui.tooltip.on("remove", function(){
                    $(me).tooltip("destroy");
                });
          },
        }
    );
    $(this).tooltip("open");
});

HTML

<a href="#" class="tooltip" data-description="That&apos;s what this widget is">Test</a>

サンプル: http://jsfiddle.net/A44EB/123/

2
user2438271