0

我使用这里显示的这个工具提示脚本:http: //www.htmldrive.net/items/show/681/jQuery-and-CSS3-Simple-Tooltip.html

这就是我使用的,同样有一些变化:

$(document).ready(function() {

        $("body").on("mouseover", ".tip_trigger", function(){
            tip = $(this).find('.tip');
            $(".tip").html('Loding...');
            tip.show(); //Show tooltip
        }, function() {
            tip.hide(); //Hide tooltip

        }).mousemove(function(e) {
            var mousex = e.pageX; //Get X coodrinates
            var mousey = e.pageY; //Get Y coordinates
            var tipWidth = tip.width(); //Find width of tooltip
            var tipHeight = tip.height(); //Find height of tooltip


        var X = $('.tip_trigger').offset().left;
        var Y = $('.tip_trigger').offset().top;
        mousex = e.pageX - X+180;
        mousey = e.pageY - Y+105;


            tip.css({  top: mousey, left: mousex });
            $(".tip").html('Loding...');
            var idp= this.title;

             $('.tip').load("/infopage.php", { id: idp});


        });

});

带有提示的 html 是这样的:

<td style="padding-left:4px;"><a href="#" class="tip_trigger" title="40420549">text<span class="tip"></span></a> txtxtxtxt</td>

效果很好,但问题是,在我使用 ajax 加载一些 php 内容后,脚本无法处理来自那里的内容。

为什么会这样?如果有其他方法可以将 php 内容加载到工具提示中,那也很好:)

4

1 回答 1

1

编辑:能够通过将您的 jQuery 分成三个元素来获得实时“开启”功能。“ON mouseover” “ON mousemove” 和 “ON mouseout” - 因为 on 函数不支持悬停的多个定义......还必须为每个函数添加一个提示变量声明才能使其工作:

var tip = $(this).find('.tip');

$(document).ready(function() {

    $("body").on("mouseover", ".tip_trigger", function(){
        var tip = $(this).find('.tip');
        $(".tip").html('Loding...');
        tip.show(); //Show tooltip
    });


    $("body").on("mouseout", ".tip_trigger", function(){
        var tip = $(this).find('.tip');
        tip.hide(); //Hide tooltip
    });


    $("body").on("mousemove", ".tip_trigger", function(e){
        var tip = $(this).find('.tip');
        var mousex = e.pageX; //Get X coodrinates
        var mousey = e.pageY; //Get Y coordinates
        var tipWidth = tip.width(); //Find width of tooltip
        var tipHeight = tip.height(); //Find height of tooltip


        var X = $('.tip_trigger').offset().left;
        var Y = $('.tip_trigger').offset().top;
        mousex = e.pageX - X+180;
        mousey = e.pageY - Y+105;


        tip.css({  top: mousey, left: mousex });
        $(".tip").html('Loading...');
        var idp= this.title;

         $('.tip').load("infopage.php", { id: idp});

    });

});

这个设置应该让你更进一步 - 但是如果你的 PHP 没有被 ajax 调用,我就陷入了僵局 - 希望这会有所帮助


这里发生的事情是您的 ajax 调用生成的新内容存在问题,新内容尚未使用您的 jQuery 函数实例化:

$(".tip_trigger").hover(function(){ ...

要解决此问题,您需要将该 jQuery .hover 触发器转换为 .on() 或 .live() 函数[取决于您的 jQuery 版本,.live 是类似于 .on() 的较旧的已弃用函数。如果您正在使用任何最新的 jQuery 版本,您应该首先尝试 .on()]

这样的事情将解决这个问题:

$("body").on("mouseover", ".tip_trigger", function(){ ...

这大致翻译为:

在页面主体内 - 在所有元素“.tip_trigger”的悬停事件上[无论它们何时生成,无论是使用 ajax 还是在文档就绪时] - 调用所述函数......

需要注意的重要一点是,使用“body”是一种不好的做法,您需要将“body”选择器替换为调用此 jQuery 时文档中存在的最具体的元素,并且还包含“. tip_trigger" 使用 ajax 创建的对象。你可以在这里更具体将提高性能。

于 2013-05-18T23:50:02.180 回答