0

クリックするといくつかのイベントをトリガーし、新しいクラスを追加して古いクラスを削除するアンカーがありますが、新しいクラスでもう一度クリックすると、元のイベントが再びトリガーされます(クラスがまったく削除されなかった場合のように) )。.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');
    });
  });
4

2 に答える 2

1

この行は、後でクラスが変更された場合でも、実行時にクラスを持つすべての要素にコールバックを登録します。

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

使用する

$(document).on('click', '.no-cuenta',function(e) {
于 2012-09-23T07:32:08.690 に答える
1

.on() メソッドを使用して、クリック イベント ハンドラーをデリゲートにバインドする必要があります。これにより、ハンドラーが後で作成された場合でも、指定されたクラスを持つすべての要素に確実にバインドされます。

次のコードは、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');
    });
});
于 2012-09-23T07:32:21.073 に答える