首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从jQuery生成内容

从jQuery生成内容
EN

Stack Overflow用户
提问于 2015-04-01 12:35:26
回答 1查看 43关注 0票数 0

我正在为个人使用的jQuery工具提示模块工作。在我的代码中,我使用jQuery的mousemove和mouseout函数来生成工具提示。但是,当我将鼠标移到元素上时,它会击中build函数中的if语句,并说工具提示应该在那里,尽管我可以在Firebug和Chrome工具中看到它不是。

代码语言:javascript
复制
$.fn.tooltip = function(userOptions)
{
    var defaultOptions =    {
                                position: '',
                                follow: true
                            };

    var options = $.extend(defaultOptions, userOptions);

    $(this).mouseenter(function()
    {
        var title = $(this).data('title');

        build(title, options.position, options.follow);

        var top, left;

        var tooltip = $('#tooltip');

        if (tooltip.hasClass('top'))
        {
            top = $(this).offset().top - ($(this).height() * 2) - 10;
            left = $(this).offset().left;
        }

        else if (tooltip.hasClass('right'))
        {
            top = $(this).offset().top - ($(this).height() / 2);
            left = $(this).offset().left + tooltip.width(); 
        }

        else if (tooltip.hasClass('bottom'))
        {
            top = $(this).offset().top + $(this).height() + 10;
            left = $(this).offset().left;
        }

        else if (tooltip.hasClass('left'))
        {
            top = $(this).offset().top - ($(this).height() / 2);
            left = $(this).offset().left - (tooltip.width() * 1.5);
        }

        tooltip.css('top', top).css('left', left).show();

    });

    $(this).mousemove(function(e)
    {
        if (options.position === "" || options.position === undefined || options.follow === true)
        {
            var title = $(this).data('title');

            build(title, options.position, options.follow);

            var top = e.pageY + 25;
            var left = e.pageX + 10;

            $('#tooltip').css('top', top).css('left', left).show();
        }
    });

    $(this).mouseout(function()
    {
        $('#tooltip').hide();
    });

    function build(title, position, follow)
    {
        if ($('#tooltip'))
        {
            console.log("The tooltiop should be on the page.");
            $('#tooltip-content > p').text = title;
        }

        else
        {
            console.log("Position is: " + position);

            var markup  = '<div id="tooltip" class=' + position + '">';
                markup += '<div id="tooltip-content">';
                markup += '<p>' + title + '</p>';
                markup += '<span id="tooltip-arrow"></span>';
                markup += '</div>';
                markup += '</div>';

            $('body').append(markup);
        }
    }
};

最初的目标是在用户第一次移动元素时创建工具提示,然后当鼠标移动时,我想隐藏工具提示,并将其移开,直到再次需要它。这就是为什么我要检查它是否存在于构建函数中。我知道我忽略了一些东西,我就是搞不懂是什么。有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-01 14:15:16

在build函数中,更改if中的检查,如:

代码语言:javascript
复制
if ($('#tooltip').lenght) {

如果未将#工具提示追加到body中,则返回false;如果为true,则返回true。$('# tooltip ')将始终返回一个jQuery对象,因此它永远不会是false,但如果工具提示元素尚未添加到主体中,则它的长度将为0,因此为false。

jsFiddle

致以问候。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29390996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档