jQuery中的弹出窗口

jQuery中的弹出窗口,jquery,popup,modal-dialog,Jquery,Popup,Modal Dialog,我有一个代码,不知怎么的,但现在,当我试图重写我的脚本时,突然我得到了错误的弹出窗口的X和Y位置。 这是第一个问题 下一个问题是,这段代码相当糟糕,因为我在显示弹出窗口时总是遇到一些错误。这很难解释,你最好看看代码 主要的事情是:一个有一个元素(比如说一张图片),当鼠标悬停在窗口上时,我需要保持窗口显示。换句话说,我必须能够从那个窗口复制一些信息。所以我写了一个代码,但是它有很多bug,现在除了bug,我得到了错误的X和Y位置。看: $(".infoBox").die(); $(".in

我有一个代码,不知怎么的,但现在,当我试图重写我的脚本时,突然我得到了错误的弹出窗口的X和Y位置。 这是第一个问题

下一个问题是,这段代码相当糟糕,因为我在显示弹出窗口时总是遇到一些错误。这很难解释,你最好看看代码

主要的事情是:一个有一个元素(比如说一张图片),当鼠标悬停在窗口上时,我需要保持窗口显示。换句话说,我必须能够从那个窗口复制一些信息。所以我写了一个代码,但是它有很多bug,现在除了bug,我得到了错误的X和Y位置。看:

    $(".infoBox").die();
$(".infoBox").live('mouseover mouseout', function(e) {
    if (e.type == 'mouseover') {
        $("#infoBox").html("");
        $("#infoBox")
          .css('top', (e.pageY - 10) + 'px')
          .css('left', (e.pageX - 20) + 'px');

        setTimeout(showInfoBox, 500);

        ID = $(this).attr('id');    

        if ($(this).hasClass("companyInfo"))    { showCompanyInfo(ID); }
        if ($(this).hasClass("userInfo"))       { showUserInfo(ID);    }

    } else {
        setTimeout(hideInfoBox, 1000);
    }
});

function showInfoBox() {
    $("#infoBox").fadeIn('slow');
}

function hideInfoBox() {
    if (mouse_in_infoBox == 0) {
        $("#infoBox").hide();
        $("#infoBox").html("");
    }
};

$("#infoBox").hover(
    function() {
        mouse_in_infoBox = 1;
    },
    function() {
        mouse_in_infoBox = 0;
        setTimeout(hideInfoBox, 1000);
    }
);
例如,我有

<img class="infoBox" id="company_id_which_was_dynamically_added">
在我的index.php中,我得到了,CSS是:

#infoBox {
display: none;
position: absolute;
border: 1px solid #CDFF00;
background-color: #1C1F1A;
color: #CCCC33;
padding: 10px;
z-index: 5;
max-width: 400px;
min-width: 50px;
min-height: 50px;
}
啊,对,另外一个问题是关于生死攸关的方法。在我的站点中,我有很多选项卡,当我切换它们时,我会在一些元素上放置类似.click/.hover的处理程序。这里我使用.live方法,因为我的选项卡使用ajax。但当我多次切换选项卡时,我得到了相同的几个处理程序,例如,如果我显示一个lightbox,我得到了几个lightbox。现在我在.live()之前使用了.die(),但这似乎根本不是一个好的解决方案

我真的很感激任何帮助,因为我多次尝试创建这些弹出窗口,但总是遇到一些错误。在我上面的代码中,如果你点击鼠标,你会看到空窗口和其他不好的东西


提前谢谢

这里有一些似乎不正确的地方,但是如果没有看到更多的代码和获得更多的信息,就很难准确地说出发生了什么。您使用的是哪个版本的jQuery,哪些浏览器有问题,问题是否存在于所有浏览器上,还是只存在于特定的浏览器上

根据,live()从1.7版起已不推荐使用,应改用。可能您的问题与使用live处理程序有关

另一个可以解决pageX值不正确的方法是检查e.pageX实际上是一个整数(可以使用parseInt(e.pageX,10)来确保它是一个整数)。我遇到过一些奇怪的问题,变量应该是整数,但由于某种原因最终变成了字符串。现在我确保将所有整数声明为整数(使用parseInt()),并且不允许javascript自行决定

此外,代码的这一部分没有任何意义:

$("#infoBox").hover(
    function() {
        mouse_in_infoBox = 1;
    },
    function() {
        mouse_in_infoBox = 0;
        setTimeout(hideInfoBox, 1000);
    }
);
_信息框中鼠标_的值始终为0

我看到的另一个问题是,您与infoBox的选择器不一致。infoBox是一个类$('.infoBox')还是一个id$('#infoBox')?根据你上面给我们的代码,你有许多不正确的选择器。对infoBox的任何引用都应该是$('.infoBox'),而不是$('#infoBox')。你的CSS也适用于id#infoBox,所以不确定这是否是有意的


希望这有帮助

这里有一些似乎不正确的地方,但是如果没有看到更多的代码和获得更多的信息,就很难准确地说出发生了什么。您使用的是哪个版本的jQuery,哪些浏览器有问题,问题是否存在于所有浏览器上,还是只存在于特定的浏览器上

根据,live()从1.7版起已不推荐使用,应改用。可能您的问题与使用live处理程序有关

另一个可以解决pageX值不正确的方法是检查e.pageX实际上是一个整数(可以使用parseInt(e.pageX,10)来确保它是一个整数)。我遇到过一些奇怪的问题,变量应该是整数,但由于某种原因最终变成了字符串。现在我确保将所有整数声明为整数(使用parseInt()),并且不允许javascript自行决定

此外,代码的这一部分没有任何意义:

$("#infoBox").hover(
    function() {
        mouse_in_infoBox = 1;
    },
    function() {
        mouse_in_infoBox = 0;
        setTimeout(hideInfoBox, 1000);
    }
);
_信息框中鼠标_的值始终为0

我看到的另一个问题是,您与infoBox的选择器不一致。infoBox是一个类$('.infoBox')还是一个id$('#infoBox')?根据你上面给我们的代码,你有许多不正确的选择器。对infoBox的任何引用都应该是$('.infoBox'),而不是$('#infoBox')。你的CSS也适用于id#infoBox,所以不确定这是否是有意的


希望这有帮助

只是一个简短的建议。这可能不合适。但我会使用.position()并抓取您想要的方向。此时,您正在抓取CSS顶部和左侧。如果它们完全定位,这是很好的。但position会马上做。只是一个简单的建议。这可能不合适。但我会使用.position()并抓取您想要的方向。此时,您正在抓取CSS顶部和左侧。如果它们完全定位,这是很好的。但是position会很快做到。
live()
并没有被弃用,不鼓励使用它,您仍然可以使用
live()
,1.7+只需使用一个别名来
on()
live()
@lolwut:这很公平。我只是在说明jQuery网站()上提到的内容:“
live()
没有被否决,不鼓励使用它,您仍然可以使用
live()
,使用较旧版本的jQuery用户应该使用.delegate()来附加事件处理程序。”,1.7+只需使用别名将
on()
live()
@lolwut:Fair够了。我只是在说明jQuery网站()上提到的内容:“从jQuery 1.7开始,.live()方法已被弃用。请使用.on()附加事件处理程序。较旧版本的jQuery用户应优先使用.delegate(),而不是.live()