由于某种原因,代码的行为异常。
这在If Else函数中发生。在其他部分,它应该在1000ms内淡出,然后删除Class,然后转到下一条语句。但是很显然,第二条语句首先被召唤出来,一切都变得糟糕了。 :(。

$(function() {

$(document).click(function(e) {
    if((e.target.id == 'RWorld') || (e.target.id == 'abc'))
    {
    $(".sborder").fadeOut(1000, function() {

    $(".sborder").removeClass("sborder");
    });
    }

});




$("div#inner").children().click(function() {


//$("div#inner .sborder").removeClass("sborder");

var name = $(this).attr('id');

//alert($("div#inner").find("div").hasClass("sborder"));
if($(".sub"+name).hasClass("sborder"))
{
    $(".sub"+name).fadeOut(300, function() {
    $(".sub"+name).removeClass("sborder");
    });
}
else
{



    $(".sborder").fadeOut(1000, function() {
    $(".sborder").removeClass("sborder");});       // The Problem is in here. This piece of Code doesnt work exactly as i thought it would ...

    $(".sub"+name).addClass("sborder").fadeIn(1000);

}
});
});


请帮忙 :(。

最佳答案

您可能希望淡入与淡出同时发生,对吗?在这种情况下,您需要像这样缓存查询结果:

var $sborder = $(".sborder");
$sborder.fadeOut(1000, function() {
    $sborder.removeClass("sborder");
});
$(".sub" + name).addClass("sborder").fadeIn(1000);


您的问题是removeClass(“ sborder”)删除了添加到$(“。sub” + name)的sborder类,因为它发生在一秒钟后。换句话说,事情发生的顺序如下:


开始淡出当前具有“ sborder”类别的内容
将“ sborder”类添加到$(“。sub” +名称)
开始淡入$(“。sub” +名称)
项目1之后的1秒钟开始淡出。从项目2中现在具有“ sborder”类的每个元素中删除“ sborder”类,该元素现在包括由于项目2由$(“。sub” + name)返回的每个元素。


最佳做法是,使用jQuery时...


尽可能尝试从具有ID或标记名($('#container .sborder'))的内容中向下钻取。在较旧的浏览器中,按类搜索可能非常慢,并且添加一些上下文意味着jQuery不必搜索整个文档。
尽可能尝试缓存查询结果。每次调用$('。something')时,它都会查询DOM。因此,如果将结果缓存在变量中,则只需要进行一次查询。显然,只有在您知道DOM在此期间没有更改的情况下,才这样做。就我们这里的情况而言,我们知道DOM已更改,但我们只想影响第二秒之前具有“ sborder”的元素。

关于jquery - jQuery代码以意外方式进行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10674718/

10-11 05:51