2014-09-24 58 views
0

我的jQuery脚本有问题。它有点不错,但是当我尝试在它首先工作的类之间切换时。 脚本就像它应该改变类一样。但是当我尝试再次执行此操作时,我必须单击链接,然后在其他地方,然后再次运行。 我希望能够一遍又一遍地重复整个过程,而无需点击两次额外的时间。我的脚本有问题

var clickOnSettings = true; 
$(".settings_link").click(function() { 
    event.preventDefault(); 
    if (clickOnSettings) { 
     $("#coverup").toggleClass("cover1"); 
     $("#settingani").toggleClass("settings1"); 
     clickOnSettings = false; 
    } 
}); 
$("#coverup").click(function() { 
    if (!clickOnSettings) { 
     $("#coverup").toggleClass("cover2"); 
     $("#settingani").toggleClass("settings2"); 
     clickOnSettings = true; 
    } 
}); 

创建的jsfiddle:

http://jsfiddle.net/5dzt1v6f/13/

回答

1

如果切换 'cover1',你基本上有和没有的元素 'cover1' 之间进行切换。这并不意味着您在删除cover1时会自动获取cover2

你必须自己做。幸运的是,toggleClass有一个接受布尔值的第二个参数。这使您可以根据您方便地引入的布尔值轻松地开启或关闭课程。

此外,这使得单击处理两个元素是相同的:

var clickOnSettings = false; 
$(".settings_link, #coverup").click(function() { 
    event.preventDefault(); 
    clickOnSettings = ! clickOnSettings; 
    //Toggle all classes. 
    $("#coverup").toggleClass("cover1", clickOnSettings); 
    $("#settingani").toggleClass("settings1", clickOnSettings); 
    $("#coverup").toggleClass("cover2", !clickOnSettings); 
    $("#settingani").toggleClass("settings2", !clickOnSettings); 
}); 

http://jsfiddle.net/5dzt1v6f/20/

+0

我明白你是怎么做到的,但在我的情况下并不奏效。 刚刚输入的div在0.2s以内退出。 – hetasbo 2014-09-24 20:34:29

+0

是的,我发现了。我已经重写了整个答案,所以现在代码更短,更干净,并且没有那个神器了。我删除了旧的代码片断,因为它与此相比是次优的。 – GolezTrol 2014-09-24 20:35:54

+0

这工作就像一个魅力。一直坚持这一点。非常感谢您的帮助! =) – hetasbo 2014-09-24 20:43:26

0

你为什么不只是使用addClassremoveClass你想要做什么。

var clickOnSettings = true; 

      $(".settings_link").click(function() { 
       event.preventDefault(); 
       if (clickOnSettings) { 
        $("#coverup").addClass("cover1"); 
        $("#settingani").addClass("settings1"); 
        $("#coverup").removeClass("cover2"); 
        $("#settingani").removeClass("settings2"); 
        clickOnSettings = false; 
       } 
      }); 
      $("#coverup").click(function() { 
       if (!clickOnSettings) { 
        $("#coverup").addClass("cover2"); 
        $("#settingani").addClass("settings2"); 
        $("#coverup").removeClass("cover1"); 
        $("#settingani").removeClass("settings1"); 
        clickOnSettings = true; 
       } 
      }); 

http://jsfiddle.net/5dzt1v6f/15/

0

我定了!

不是最漂亮的代码。但是,这工作,我需要为settingani另一个类,而不是掩饰。所以我必须这样做:

 var clickOnSettings = 1; 

     $(".settings_link").click(function() { 
      event.preventDefault(); 
      if (clickOnSettings == 1) { 
       $("#settingani").removeClass("settings0"); 
       $("#coverup").addClass("cover1"); 
       $("#settingani").addClass("settings1"); 
       clickOnSettings = 3; 
      } 
     }); 
     $(".settings_link").click(function() { 
      event.preventDefault(); 
      if (clickOnSettings == 2) { 
       $("#coverup").removeClass("cover2"); 
       $("#settingani").removeClass("settings2"); 
       $("#coverup").addClass("cover1"); 
       $("#settingani").addClass("settings1"); 
       clickOnSettings = 3; 
      } 
     }); 
     $("#coverup").click(function() { 
      if (clickOnSettings == 3) { 
       $("#coverup").removeClass("cover1"); 
       $("#settingani").removeClass("settings1"); 
       $("#coverup").addClass("cover2"); 
       $("#settingani").addClass("settings2"); 
       clickOnSettings = 2; 
      } 
     }); 

感谢您的所有帮助! =)