2011-10-30 83 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的時間元素。選擇器沒有被使用,所以當你修改其中一個元素使其不再匹配選擇器時,這是而不是反映在處理程序被自動添加/刪除。

您可能想要使用.live而不是使用選擇器,並且會自動將事件處理程序綁定到事件觸發時由選擇器匹配的元素。

0

它不會幫助您刪除.next - jQuery使用選擇器來查找元素。然後向它添加事件處理程序。現在這個元素擁有這個處理器 - 在這之後你對元素做的沒有什麼區別,現在已經太晚了。

我有一種感覺,你想.once()函數 - 這綁定處理程序只運行一次元素,沒有更多。

相關問題