用于动态实时事件的 Tipsy jquery 插件不起作用

Posted

技术标签:

【中文标题】用于动态实时事件的 Tipsy jquery 插件不起作用【英文标题】:Tipsy jquery plugin for dynamic live events is not working 【发布时间】:2011-12-13 01:28:48 【问题描述】:

我正在使用the tipsy jquery plugin 为动态显示的元素创建工具提示。

工具提示适用于非动态元素,因此我肯定包含了我需要的所有内容。我正在使用 jquery 1.5.1

这是我的 jquery 代码:$('.voted-user-image').tipsy(gravity:'s', live: true);

这是一个图像链接元素的 html,在点击触发 AJAX 请求的链接后动态出现在 div 中:

<a href="/profiles/2" class="voted-user-image" title="Test">
    <img  src="/system/photos/2/tiny/Justin Meltzer.jpeg?1306836552">
</a>`

我怎样才能让这个工具提示插件工作?

【问题讨论】:

不幸的是没有javascript错误 从链接中删除title后尝试 插件依赖于title 属性,这就是它把文本从那里拉到工具提示中的地方 【参考方案1】:

你能试试这个代码吗:

$('a.voted-user-image').tipsy(live: true);

每次添加内容时调用插件似乎都错了:)

【讨论】:

【参考方案2】:
function initTipsy()
    $(function() $('.tips').tipsy(gravity: 's',html: true); );
    $(function() $('.tips-right').tipsy(gravity: 'w',html: true); );
    $(function() $('.tips-left').tipsy(gravity: 'e',html: true); );
    $(function() $('.tips-bottom').tipsy(gravity: 'n',html: true); );

我在我的 main.js 中调用了这个函数,它适用于我的整个项目。这允许我向任何静态元素添加提示。 我对动态元素有同样的问题,我找到的解决方案是在将新元素附加到 html 后再次调用 initTipsy。我知道这不是一个很好的解决方案,但它确实有效。 希望对某人有所帮助。

【讨论】:

【参考方案3】:

它应该可以正常工作..

查看示例 ..http://jsfiddle.net/gaby/3pAue/2/(使用 Tipsy 和 1.5.1 jQuery

错误一定出在其他地方..确保你的html是有效的(ajax带来的那个,放在你放的地方是有效的..

【讨论】:

【参考方案4】:

不知道为什么 Dolphin 的回答得到了支持,甚至获得了奖励声望。他建议使用 jQuery Tipsy 的 live 选项,但这已经在原始海报提供的代码中使用(未经编辑)。显然,该选项似乎没有起到作用。

回答原帖:tipsy 插件的live 选项似乎不适用于所有版本的jQuery。版本 1.7.1 已经确认可以工作,所以升级 jQuery 可能是个好主意。

【讨论】:

【参考方案5】:

我刚刚在 AJAX 请求呈现的 div 中的 script 标记中再次调用了该插件。那行得通。

【讨论】:

对您对自己的问题给出的答案投反对票对我来说似乎很奇怪。 ;-) 但是,这不是正确的答案,并且会对性能和代码可维护性产生负面影响。海豚说得对。 .live() 本身被认为是相对低效的(例如与 .delegate() 相比),但它可以通过一个绑定正确完成工作。它是插件选项的一部分,不需要额外的大惊小怪。 我在添加 live:true 时遇到问题。在控制台中它说“未捕获的类型错误:对象 [对象对象] 没有方法 'live'” 有没有其他方法可以解决这个问题,在新添加的 div 上添加一个醉意?

以上是关于用于动态实时事件的 Tipsy jquery 插件不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP 回调后保留 jQuery 插件?

JQuery实时和可拖动事件,其中包含动态创建的元素

jQuery 事件委托不适用于某些按钮

Javascript - Jquery - 插件

发现一款好用的jquery插件(tooltipster实用的工具提示插件)

jQuery 几款比较棒的插件