2011-10-30 44 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()函数 - 这绑定处理程序只运行一次元素,没有更多。

相关问题