qTip问题 – 提示未显示,因为元素在脚本后加载

我对javascript,jQuery或它的插件不是很有经验但通常我管理。 无论如何,我的客户正在建立一个网站,其目的之一是从不同的网站上获取新闻文章,并在无序的HTML列表中显示标题。 我没有访问他的代码,新闻文章加载相当慢(很多网站加载后)。

我正在使用qTIP,这个想法是,一旦你将鼠标hover在新闻标题上,它就会生成一个工具提示。 这在我的开发环境中工作正常,因为我有虚拟标题,不是从任何地方生成的。

问题是,一旦客户端在其测试环境中设置了站点,将新闻标题加载到列表中的脚本就会很慢,以至于qTIP脚本在列表中有任何元素之前加载。 因此,它不知道任何

  • 的提取和生成工具提示。

    有没有办法确保在工具提示脚本加载之前加载所有新闻文章? 我认为加载脚本的简单延迟并不是很聪明,因为有些标题的加载时间比其他标题要长,因此延迟时间必须相当长。

    请参阅底部的更新

    我也一直在研究这个问题,并提出了类似于@Gaby提供的解决方案。 @Gaby解决方案的问题是,在鼠标hover事件发生之前,它不会创建qTip。 这意味着您第一次鼠标hover时不会看到qTip,但第二次会看到。 此外,它会在每次鼠标hover时重新创建qTip,这不是最佳选择。

    我采用的解决方案是:

     $("li").live('mouseover', function() { var target = $(this); if (target.data('qtip')) { return false; } target.qtip(...); target.trigger('mouseover'); }); 

    这是它的作用:

    • 将目标设置为li元素
    • 返回该li元素是否已有qtip
    • 如果li上没有qtip,则对其应用qtip
    • 再次发送鼠标hover触发器以激活qtip

    我知道这有点hacky,但它似乎工作。 另请注意, 2.0版本的qTip应支持live()作为选项。 据我所知, 目前的2.0开发分支尚不支持它。

    更新:

    这是正确的方法,直接来自qtip开发人员自己在论坛上:

     $('selector').live('mouseover', function() { $(this).qtip({ overwrite: false, // Make sure another tooltip can't overwrite this one without it being explicitly destroyed content: 'I\'ma live qTip', // comma was missing here show: { ready: true // Needed to make it show on first mouseover event } }); }) 

    因此,它首先确保您不会在每次鼠标hover时使用“overwrite:false”重新创建新的qtips。 然后它使用“show:{ready:true}”在第一次鼠标hover时显示qtip。

    您应该使用jQuery框架的Live Events

    将处理程序绑定到所有当前和未来匹配元素的事件(如单击)。 也可以绑定自定义事件。

    所以例如你可以做类似的事情

     $("li").live( 'mouseover', function(){ $(this).qTip(...); }); 

    参考: http : //docs.jquery.com/Events/live

    不是没有,但我刚刚在我的onmouseover事件中添加了show:{ready:true} 。 这使它在Chrome&FF中运行。

    是的我想出了类似的东西。 我想有人在他们的论坛上发布了类似的一个。 我将mouseover-event更改为mousemove,以便qtip在第一次mouseover时激活。

     $('li').live('mousemove', function() { if( !$(this).data('qtip') ) { $(this).qtip(...) 

    我也同意这是一个非常hacky的解决方案,但我无法想出一个更好的解决方案。 也许在填充li的回调函数中检查和应用qtip会更好,但我实际上无法访问该代码。