如何修改新的jQueryUI工具提示窗口小部件,以便在文档上某些元素的click事件上打开工具提示,而其他人仍在鼠标悬停事件上显示其工具提示。在单击打开的情况下,应通过单击文档上的其他位置来关闭工具提示。
这有可能吗?
答案 0 :(得分:27)
上一个答案不使用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/
答案 1 :(得分:9)
此代码会创建一个工具提示,该工具提示将保持打开状态,直到您在工具提示外单击。即使在您关闭工具提示后它也能正常工作。它是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");
}
});
答案 2 :(得分:6)
这个答案是基于与不同班级合作的。当click事件发生在具有类'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();
});
})
})
答案 3 :(得分:5)
我今天一直在玩这个问题,我想我会分享我的结果......
使用jQueryUI工具提示中的示例,自定义样式和自定义内容
我想要将这两者混合起来。我希望能够有一个popover而不是工具提示,并且内容需要是自定义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类)时,我们会欺骗悬停状态,保存工具提示的输入标签会调用鼠标悬停状态,因此只要我们愿意,就会触发工具提示并保持它... CSS就是小提琴......
无论如何,这是一个小提琴,可以看到互动更好一点: http://jsfiddle.net/AK7pv/
答案 4 :(得分:3)
更新Mladen Adamovic的答案有一个缺点。它只工作一次。然后禁用工具提示。每次代码都应该补充点击启用工具提示,使其工作。
$('#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");
}
});
答案 5 :(得分:2)
此版本可确保工具提示保持足够长的时间,以便用户将鼠标移到工具提示上并保持可见状态直到鼠标移开。方便用户从工具提示中选择一些文本。
$(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>
答案 6 :(得分:-5)
的jsfiddle http://jsfiddle.net/bh4ctmuj/225/
这可能会有所帮助。
<!-- HTML -->
<a href="#" title="Link Detail in Tooltip">Click me to see Tooltip</a>
<!-- Jquery code-->
$('a').tooltip({
disabled: true,
close: function( event, ui ) { $(this).tooltip('disable'); }
});
$('a').on('click', function () {
$(this).tooltip('enable').tooltip('open');
});