2013-05-08 90 views
3

我有一个divjQuery的.show()仅适用于一秒钟

<div id="fade_bg"> 
     <div id="login_div"> 
      <form action="../classes/login/Authenticator.php" method="post"> 
       <p>username: <input type="text" name="username" /></p> 
       <p>password: <input type="password" name="password" /></p> 
       <p><input type="submit" name="login" /></p> 
      </form> 
      <p><a id="cancel" href="#">cancel</a> 
     </div> 
    </div> 

,我只希望当点击

<a id="login" href="">Admin login</a> 

显现。我用

 $(function() { 

      $('a#login').click(function() { 
       $('#fade_bg').show(); 
       $('#login').hide(); 
      }); 

      $('a#cancel').click(function() { 
       $('#fade_bg').hide(); 
       $('#login').show(); 
      }); 
     }); 

然而,当我点击链接,我希望出现在div只出现了一秒钟,然后恢复正常,如果我点击了取消按钮。这是为什么发生?

编辑:JS调试器控制台上没有错误。

+0

替换它相信它喜欢刷新页面年龄。尝试添加'onsubmit =“false”' – 2013-05-08 16:18:38

+0

您需要防止锚点的默认操作。在一些浏览器中,一个空href将重新加载页面,并且一个哈希href将滚动到顶部: – adeneo 2013-05-08 16:18:57

+1

首先我认为在你的调用中使用e.preventDefault是一个好主意,你需要阻止你的默认行为正在推出一些新功能 – Richlewis 2013-05-08 16:19:09

回答

10

尝试这样的:

$('#login').click(function (e) { 
    e.preventDefault(); 
    $('#fade_bg').show(); 
    $(this).hide(); 
}); 

$('#cancel').click(function (e) { 
    e.preventDefault(); 
    $('#fade_bg').hide(); 
    $('#login').show(); 
}); 

DEMO HERE

+0

完美!谢谢! – mishmomo 2013-05-08 16:21:02

+0

很高兴帮助! – 2013-05-08 16:22:50

0

当你提交一个表单我的提交按钮总是发布形式,从而

<input type="submit" name="login" /> 

<input type="button" name="login" />