新しいjQueryUIのツールチップウィジェットを変更して、ドキュメント上の特定の要素のクリックイベントでツールチップを開き、他の要素はmouseoverイベントでtootipを表示する方法。クリックオープンの場合、ドキュメントのどこかをクリックしてツールチップを閉じる必要があります。
これはまったく可能ですか?
前の答えは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/ を使用して確認できます
このコードは、ツールチップの外側をクリックするまで開いたままになるツールチップを作成します。ツールチップを閉じた後でも機能します。 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");
}
});
この答えは、さまざまなクラスでの作業に基づいています。クラス '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();
});
})
})
私は今日この問題で遊んでいます、私は自分の結果を共有すると思いました...
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/
更新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");
}
});
このバージョンでは、ユーザーがマウスをツールチップ上に移動し、マウスアウトするまでツールチップを表示し続けることができます。ユーザーがツールチップからテキストを選択できるようにするのに便利です。
$(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's what this widget is">Test</a>