我有一个锚点,它在单击时会触发一些事件,并添加一个新类并删除旧类,但是当我使用新类再次单击它时,原始事件再次触发(就像根本没有删除该类一样)。我尝试了.live()
功能,但没有帮助(toggleclass()
也不起作用)。
有谁知道这是怎么回事?
$('.no-cuenta').click(function(e) {
e.preventDefault();
$('.login-inputs').hide('drop', 1000, function(){
$('.register-inputs').show('drop', 1000);
$('.no-cuenta').empty().text('Ya tienes cuenta? Ingresa').addClass('si-cuenta').removeClass('no-cuenta');
});
});
//Cargar la forma para loggearse
$('.si-cuenta').live('click',function(d) {
d.preventDefault();
$('.register-inputs').hide('drop', 1000, function(){
$('.login-inputs').show('drop', 1000);
$('.si-cuenta').empty().text('No tienes cuenta? Registrate').addClass('no-cuenta').removeClass('si-cuenta');
});
});
您应该使用 .on() 方法将 click 事件处理程序绑定到委托。这可确保处理程序绑定到具有指定类的任何元素,即使它们是稍后创建的。
请注意,以下代码使body
元素成为处理这些单击事件的委托,您应该使用最接近的公共父级作为这些元素的"管理器":
$("body").on('click', '.no-cuenta', function () {
e.preventDefault();
$('.login-inputs').hide('drop', 1000, function(){
$('.register-inputs').show('drop', 1000);
$('.no-cuenta')
.empty()
.text('Ya tienes cuenta? Ingresa')
.addClass('si-cuenta')
.removeClass('no-cuenta');
});
});
$("body").on('click', '.si-cuenta', function () {
d.preventDefault();
$('.register-inputs').hide('drop', 1000, function(){
$('.login-inputs').show('drop', 1000);
$('.si-cuenta')
.empty()
.text('No tienes cuenta? Registrate')
.addClass('no-cuenta')
.removeClass('si-cuenta');
});
});
此行在执行时注册所有具有该类的元素的回调,即使它们稍后更改类:
$('.no-cuenta').click(function(e) {
用
$(document).on('click', '.no-cuenta',function(e) {