2011-10-30 17 views
0

javascriptの動作をトリガするセレクタを削除して、一時的に機能を無効にしようとしました。セレクタ(.next)が削除されても、この関数は動作し続けます。セレクタが削除されてもJqueryのクリック機能が機能し続ける

beta.art89.seはウェブページです。プロジェクトをクリックし、右下にある矢印をクリックしてアクティブにします。

コード:

$.showElement = function(index) { 
    last_prev_object = $('#pagination .prev').clone(true); 
    last_next_object = $('#pagination .next').clone(true); 

    var project_html = $.parseElement(index); 

    if(project_html != '') { 
     $(".content-bg").html(project_html); 

     $('#pagination .prev').unbind('click'); 
     $('#pagination .prev').bind('click', function(e) { 
      e.preventDefault(); 
      $('#pagination .prev').removeClass('prev'); 
      $(".content-bg") 
       .addClass('temp_content') 
       .removeClass('current_content') 
       .before($('<div class="content-bg current_content"></div>').html($.parseElement(current_index-1))) 
       .animate({'left': '+=640px'}, 600); 
      $(".content-bg.current_content") 
       .css('top', '0px') 
       .css('left', (parseInt($(".content-bg.temp_content").css('left'))-640)+'px') 
       .animate({'left': '+=640px'}, 600, function(){$(".content-bg.temp_content").remove()}); 
     }); 

     $('#pagination .next').unbind('click'); 
     $('#pagination .next').bind('click', function(e) { 
      e.preventDefault(); 
      $('#pagination .next').removeClass('next'); 

      $(".content-bg") 
       .addClass('temp_content') 
       .removeClass('current_content') 
       .after($('<div class="content-bg current_content"></div>').html($.parseElement(current_index+1))) 
       .animate({'left': '-=640px'}, 600); 
      $(".content-bg.current_content") 
       .css('top', '0px') 
       .css('left', (parseInt($(".content-bg.temp_content").css('left'))+640)+'px') 
       .animate({'left': '-=640px'}, 600, function(){$(".content-bg.temp_content").remove()}); 
     }); 
     $(".width-wrap").animate({'top': '-=275px'}, 600); 
     $(".content-bg").css('left', (640*position)+'px').animate({'top': '0px'}, 600); 
    } 
} 

答えて

1

バインドのコメント$('#pagination .next')$('#pagination .prev')は必要に応じて機能します。私はあなたの要件を誤解していない場合。

プロジェクトに戻るときに、すでにナビゲーションアイテムのクローンバージョンを使用していますか。すでにバインドされていて、複製された要素を置き換えているので、再度要素を再バインドする必要はありません。

$.showElement = function(index) { 
    last_prev_object = $('#pagination .prev').clone(true); 
    last_next_object = $('#pagination .next').clone(true); 

    var project_html = $.parseElement(index); 

    if(project_html != '') { 
     $(".content-bg").html(project_html); 

     $('#pagination .prev').unbind('click'); 
     /*$('#pagination .prev').bind('click', function(e) { 
      e.preventDefault(); 
      $('#pagination .prev').removeClass('prev'); 
      $(".content-bg") 
       .addClass('temp_content') 
       .removeClass('current_content') 
       .before($('<div class="content-bg current_content"></div>').html($.parseElement(current_index-1))) 
       .animate({'left': '+=640px'}, 600); 
      $(".content-bg.current_content") 
       .css('top', '0px') 
       .css('left', (parseInt($(".content-bg.temp_content").css('left'))-640)+'px') 
       .animate({'left': '+=640px'}, 600, function(){$(".content-bg.temp_content").remove()}); 
     });*/ 

     $('#pagination .next').unbind('click'); 
     /*$('#pagination .next').bind('click', function(e) { 
      e.preventDefault(); 
      $('#pagination .next').removeClass('next'); 

      $(".content-bg") 
       .addClass('temp_content') 
       .removeClass('current_content') 
       .after($('<div class="content-bg current_content"></div>').html($.parseElement(current_index+1))) 
       .animate({'left': '-=640px'}, 600); 
      $(".content-bg.current_content") 
       .css('top', '0px') 
       .css('left', (parseInt($(".content-bg.temp_content").css('left'))+640)+'px') 
       .animate({'left': '-=640px'}, 600, function(){$(".content-bg.temp_content").remove()}); 
     });*/ 
     $(".width-wrap").animate({'top': '-=275px'}, 600); 
     $(".content-bg").css('left', (640*position)+'px').animate({'top': '0px'}, 600); 
    } 
} 

あなたの要件を間違えた場合は教えてください。

4

あなたは、イベントハンドラをバインドすると、それはあなたが.bindを呼び出す時に要素のセットにバインドされています。セレクタは使用されていないので、セレクタと一致しないように要素の1つを変更すると、ではなく、が自動的に追加/削除されます。

代わりにセレクタを使用する.liveが必要な場合があり、イベントが発生するとセレクタが一致する要素にイベントハンドラを自動的にバインドします。

0

これは、.nextを削除するのに役立ちません - jQueryはセレクタを使用して要素を検索します。次に、それにイベントハンドラを追加します。要素にはそのハンドラがあります。後でその要素に何をしても違いはありません。すでに遅すぎます。

私はあなたが.once()機能を望んでいると感じました。これは、ハンドラを要素に1回だけ実行するようにバインドします。

関連する問題