jQuery removeClass实际上并没有删除类

时间:2012-09-23 07:24:30

标签: jquery live addclass removeclass

我有一个锚点,在点击它时会触发一些事件,并添加一个新类并删除旧类,但是当我再次使用新类点击它时,原始事件再次被触发(就像这个类不是完全删除)。我尝试了.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');
    });
  });

2 个答案:

答案 0 :(得分:1)

该行在执行时对所有具有该类的元素进行回调,即使它们稍后更改了类:

$('.no-cuenta').click(function(e) {

使用

$(document).on('click', '.no-cuenta',function(e) {

答案 1 :(得分:1)

您应该使用.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');
    });
});