2010-11-01 56 views
2

我是stackoverflow的新手!JavaScript变量不设置 - 通过萤火虫检查

我对我的公司网站的一段代码有问题,使用jquery。我试图跟踪两个按钮上的点击并设置一个变量/ s,然后可以用它来确定一个操作过程。基本上它是一个滑动下拉菜单,如果该变量设置为true,则另一个设置为false。我initiallised的两个变量是错误的开始与再通过点击它们应该被设置为根据情况真或假的过程:

var boollogin = false; 
var boolregister = false; 

$(document).ready(function(){ 
    $('#slidedownlogin').hide(); 
    $('#details_add_area').hide(); 
    $('#emailconfirmation').hide(); 
    $('#register').toggle(function(){ 
     if(boollogin == false){ 
     $('#login_area').hide(); 
     $('#register_area').show(); 
     $('#details_add_area').hide(); 
     $('#slidedownlogin').animate({'height':'235px'},1500, 'easeOutExpo'); 
     }else{ 
     $('#slidedownlogin').animate({'height':'0px'},1500, 'easeOutExpo',function(){ 
      $('#login_area').hide(); 
      $('#details_add_area').hide(); 
      $('#register_area').show(); 
      $('#slidedownlogin').animate({'height':'235px'},1500, 'easeOutExpo'); 
      }); 
     } 
     boolregister = true; 
    } , function(){ 
    $('#slidedownlogin').animate({'height':'0px'},1500, 'easeOutExpo', function(){ 
      $('#slidedownlogin').children().hide(); 
     }); 
     boolregister = false; 
     boollogin = false; 
    }); 

    $('#login').toggle(function(){ 
     if(boolregister == false){ 
      $('#register_area').hide(); 
      $('#details_add_area').hide(); 
      $('#login_area').show(); 
      $('#slidedownlogin').animate({'height':'220px'},1500, 'easeOutExpo'); 
     }else{ 
      $('#slidedownlogin').animate({'height':'0px'},1500, 'easeOutExpo',function(){ 
      $('#register_area').hide(); 
      $('#details_add_area').hide(); 
      $('#login_area').show(); 
      $('#slidedownlogin').animate({'height':'220px'},1500, 'easeOutExpo'); 
      }); 
     } 
     boollogin = true; 
    } , function(){ 
     $('#slidedownlogin').animate({'height':'0px'},1500, 'easeOutExpo', function(){ 
      $('#slidedownlogin').children().hide(); 
     }); 
     boollogin = false; 
     boolregister= false; 
    }); 
}); 

我正在浏览的网页是在http://www.premiersoftware.co.uk/index94.php 。完整的代码现在在php文件中,所以你可以在那里看看它。您应该能够通过单击页面右上方的两个链接(Register and Login)来了解我想要做什么。这些应该会重置变量boollogin或boolregister,但检查这两个变量在萤火虫显示他们没有被重置并且不改变。因此,页面最初按预期行事,但经过一段时间和几次点击后,它变得非常古怪。形式valitation和东西尚未完成,因为我试图让动画排序第一。

我希望这里有人能够阐明为什么变量没有被重置,并建议我如何修复代码。如果有另一种方式来创建相同类型的功能,我也可以提出建议。

在此先感谢

+2

欢迎堆栈溢出(SO)! – 2010-11-01 17:54:22

+2

我不知道你在用Firebug做什么,但这些变量肯定是在变化。但是页面不能很好地工作。如果在动画完成之前单击,则会变得困惑。 – Pointy 2010-11-01 18:05:40

+0

我发誓我将两个变量都设置为在萤火虫中观看,并且几次点击之后都没有重新设置。 – 2010-11-01 22:46:40

回答

0

你尝试过做类似:

$('<a href="javascript:void(0);" id="register" onclick="toggleTheCorrectDiv(true)">Register</a>').appendTo('#support').css({'float':'right','margin-right':'10px'}); 
$('<a href="javascript:void(0);" id="login" onclick="toggleTheCorrectDiv(false)">Login</a>').appendTo('#support').css({'float':'right','margin-right':'10px'}); 

然后在你的JS,

function toggleTheCorrectDiv(toggleRegister){ 
    if (toggleRegister){ 
     //Show Register Content 
    }else{ 
     //Show Login Content 
    } 
} 
+0

这似乎更像是巫术编程而不是合理的答案。为什么混淆你的HTML和JS是正确的答案? – Chuck 2010-11-01 18:19:58

+0

这对我来说是新闻 - 使用onclick事件被认为是“巫术”或“混淆”HTML。这很简单。另外,我从未声称这是“正确”答案,但我当然认为如果OP有JS问题,这是做同样事情的直接方式。正如在许多情况下,这将会有多个“正确的”答案。我可能会问你,为什么你可以做这样简单的事情时,用多个bool值编写复杂的javascript?我的意思是,我们正在谈论触发功能的基本事件。 – Dutchie432 2010-11-01 18:25:03

+0

哇!对不起,我不是故意开始讨论巫毒比例!:)虽然我不确定如何做到这一点,但在使用新内容滑动之前,div会滑动多个动画,这可能是开放的div,一个封闭的div,其内容不同,考虑哪个按钮被按下,并且作为一个切换,我需要div随同一按钮的按下而上下滑动。上面的答案看起来太简单了,要么是答案是在脸上和右边看我的权利......我不能看到如何正确地应用它! :) – 2010-11-01 22:54:15

1

我想关闭的div而不是当用户在登录和注册之间切换时,下拉并再次打开它r,在打开的div中显示正确的注册表或登录表单可能更直观。

这段代码可以帮助你,但它实现了我上面提出的建议。

http://jsbin.com/etezo5

编辑链接,所以你可以看到代码:

http://jsbin.com/etezo5/edit

+0

这可能是一个更优雅的解决方案,但我试图效仿我们生产的一些以前的软件。我听说在Jquery中使用Queue和Stop()来微调动画,但不知道如何在这种情况下应用它们,以及它是否适用。我使用了萤火虫,并设置了太多变量boolregister和boollogin作为观看的对象,我发誓他们没有改变。它从开始从登录(开放)切换到注册开始似乎工作的罚款,它刚好在它后面都搞砸了。 – 2010-11-01 22:43:42

+0

在这种情况下,我建议您检查一下设置变量的时间。您可能必须将它们设置在onComplete处理程序中,以使它们更加准确。 – Sandro 2010-11-02 14:20:13