Noobie Jquery问题 - 我在我的脚本中发现了一个错误,不确定如何修复它

时间:2009-08-21 06:36:26

标签: jquery ajax

感谢你对my last noobie jquery question的帮助,自从你做得好以后,我还有另一个给你:)下面的脚本允许我通过从另一个HTML文件中检索一些静态标记来执行一些简单的AJAX并将其插入到我的主页。我遇到了一个我认为与异步性的魔力有关的错误,但由于我是AJAX的新手,我不确定。

当我将鼠标移到链接上时,它会检索HTML并将其插入我的主页。当我将鼠标从链接上移开时,它应该删除插入的新HTML。有时插入HTML时会出现错误,但是当您快速打开/关闭链接时不会删除该错误。我的理论是在实际插入HTML之前调用“鼠标关闭”功能,你同意吗?如果是这样,有关如何解决此问题的任何想法?这是脚本......

$(function()
{
    //HOVER EFFECT FOR CONTACT LINK
    $('a#contact_link').hover(function() 
    {        
        $('<div id="contact_container" />').load('contact.htm #contact', function() 
        {
            $(this).stop()
                .hide()
                .insertAfter('#header')
                .slideDown(250);    
        });      
    }, 
    //MOUSE OFF EFFECT FOR CONTACT LINK
    function()
    {
        $('#contact_container').remove();       
    });    
});

非常感谢您提供所有帮助!

编辑*感谢您的回复,我更改了我的脚本并且错误似乎已修复...

$(function()
{
    //RETRIEVE THE MARKUP AT PAGE LOAD
    $('<div id="contact_container" />').load('contact.htm #contact', function() 
    {
        $(this).hide()
            .insertAfter('#header');
    });

    //HOVER EFFECT FOR CONTACT LINK, SHOW THE MARKUP
    $('a#contact_link').hover(function() 
    {        
        $('#contact_container').stop()
            .slideDown(250);             
    }, 
    //MOUSE OFF EFFECT FOR CONTACT LINK, HIDE THE MARKUP
    function()
    {
        $('#contact_container').stop()
            .hide();        
    });    
});

我仍然可以在这个脚本中看到一些错误的可能性,但我会将其保存为另一个问题;)谢谢大家!

4 个答案:

答案 0 :(得分:1)

为什么不将内容只填充一次并在鼠标移出时隐藏div。如果在DOM中存在div,则再次调用hover,只需更改div的可见性。

如果结果响应相同,每次使用Ajax响应加载div都不是一个好主意。

if ($("#contact_container").length > 0){
    // the element exits in the DOM
}

答案 1 :(得分:1)

这听起来不错。

可能的方法是在ajax调用成功时设置一个标志,以指示已插入内容。然后,在hover out函数中,检查是否已设置标志,如果已设置,则调用remove命令。您可以设置一个间隔来检查标志,直到它被设置为止。

或另一种方式 -

在文档中执行加载,隐藏内容,然后分别在悬停和显示时显示和隐藏。

顺便说一下,您的选择器会插入一个标识为<div>的新contact_container元素,这是您想要的吗?

答案 2 :(得分:0)

为什么不使用mouseleave?

        $("a#contact_link").mouseleave(function(event){
            $("a#contact_link").hide("slow");
        });

答案 3 :(得分:-1)

我认为有人已回复in your previous question您的DIV选择器错误。你试过修理吗?