如何阻止此功能再次调用自身:
$(document).ready(function() {
login();
});
function login() {
$('#login').hide();
$('#pre-login button').on('click',function(event) {
$('#pre-login').hide();
$('#login').show();
$('#login :text').focus();
return false;
});
}
我有以下两种形式:
<form id="pre-login"><p>Already have an account?</p><button type="submit">Login</button></form>
<form id="login">
<input type="text" placeholder="Email Address" class="login">
<input type="password" placeholder="Password" class="login"><h4><a href="#">Forgot?</a></h4>
<button type="submit" class="action">Login</button>
</form>
第一个表单在页面加载时显示,而第二个表单设置为隐藏。单击第一个表单上的登录按钮后,将显示第二个表单,使第一个表单隐藏。但是,单击第二个表单上的登录按钮会产生相反的效果,即使我告诉jQuery仅在单击#precate登录表单的按钮时调用该函数。
我不能在这里做出正面或反面的事情,所以我想也许最好在调用一次后禁用该功能。
答案 0 :(得分:4)
您可以使用one
方法:
将处理程序附加到元素的事件。每个元素最多执行一次处理程序。
function login() {
$('#login').hide();
$('#pre-login button').one('click',function(event) {
$('#pre-login').hide();
$('#login').show();
$('#login :text').focus();
return false;
});
}
答案 1 :(得分:3)
你确定这是导致你看到的Javascript吗?我在基本jsFiddle中进行了设置,看来第二个Login按钮只是重新加载页面(并将登录表单数据提交给它),从而将其重置为初始状态。这会使它看起来像Javascript重新隐藏自己,但实际上它只会做你告诉它的 - 也就是说,开始隐藏。
如果你打算使用Javascript,请务必在Firefox中使用Firebug,或者使用Chrome的开发者工具 - 他们非常适合单步执行Javascript并监控请求以查看正在发生的事情。
我的猜测是,当您在用户登录时进行额外检查以接受登录并显示“登录”消息时,一切都将按预期工作。
答案 2 :(得分:1)
您可以使用.one()。这样可以确保事件只执行一次..
$(document).ready(function() {
login();
});
function login() {
$('#login').hide();
$('#pre-login button').one('click',function(event) {
$('#pre-login').hide();
$('#login').show();
$('#login :text').focus();
return false;
});
}
//执行click事件时,你也可以取消绑定..
function login() {
$('#login').hide();
$('#pre-login button').one('click',function(event) {
$('#pre-login').hide();
$('#login').show();
$('#login :text').focus();
$(this).unbind();
return false;
});
}