2012-02-18 64 views
0

我正在使用ajaxify.js插件https://github.com/browserstate/ajaxify动态加载内容。jQuery + Javascript:合并document.ready和ajax之间的重复函数加载

我有一些click功能,我绑定在文档就绪,但必须另外把这些功能在我的ajax加载函数内重新绑定点击事件到新添加的内容。我以前曾尝试过使用一组live函数,但它们不起作用。

无论如何,我有两次下面的代码,一次在document.ready(function(){ })里面,并且在加载内容之后再次加入ajaxify.js。

我知道这是多余的,但我不确定如何去写函数,因为我可以在其他地方“包括”它们。我怎样才能优化这些功能,以便我可以合并它们并以有效的方式再次使用它们?

谢谢!

 var $filterclear = $('.filters .filter-clear'), 
      filtercount = $filterclear.length, 
      $searchedfor = $('.searched-for'), 
      is_search = $searchedfor.length; 

     $filterclear.bind('click', function(){ 
      var $me = $(this); 

      if(filtercount == 3) { 
       $('.clear-all.filter-clear').addClass('filter-out').fadeOut('fast'); 
       $(this).addClass('filter-out').fadeOut('fast'); 
      } else { 
       $(this).addClass('filter-out').fadeOut('fast'); 
      } 

      if($me.hasClass('clear-all') || filtercount == 1) { 
       $filterclear.addClass('filter-out').fadeOut('fast'); 
       if(is_search !== 0) { 
        $('.filters').fadeOut(); 
       } 
      } 
     });  

     $('.tag.remove-term').bind('click', function(){ 
      var $me = $(this), 
       mytext = $me.text(), 
       $myfilter = $('.filters .filter-clear:contains("'+ mytext +'")'); 

      if(filtercount == 3) { 
       $('.clear-all.filter-clear').addClass('filter-out').fadeOut('fast'); 
       $myfilter.addClass('filter-out').fadeOut('fast'); 
      } else { 
       $myfilter.addClass('filter-out').fadeOut('fast'); 
      } 
     }); 

     $searchedfor.find('.filter-clear').bind('click',function(){ 
      $searchedfor.fadeOut(); 
     }); 
+0

使用'live'事件肯定听起来像是应付动态页面的最佳方式。 “live”有什么问题? – 2012-02-18 23:07:24

+0

它只是不工作! – 2012-02-19 00:43:08

回答

1

定义一个新的功能应该工作(我没有测试):

var $filterclear = $('.filters .filter-clear'), 
    filtercount = $filterclear.length, 
    $searchedfor = $('.searched-for'), 
    is_search = $searchedfor.length; 

var doSomething($myfilter) { 
    if(filtercount == 3) { 
     $('.clear-all.filter-clear').addClass('filter-out').fadeOut('fast'); 
    } 
    $myfilter.addClass('filter-out').fadeOut('fast'); 
}; 

$filterclear.bind('click', function() { 
    var $me = $(this); 

    doSomething($me); 

    if($me.hasClass('clear-all') || filtercount == 1) { 
     $filterclear.addClass('filter-out').fadeOut('fast'); 
     if(is_search !== 0) { 
      $('.filters').fadeOut(); 
     } 
    } 
}); 

$('.tag.remove-term').bind('click', function(){ 
    var $me = $(this), 
     mytext = $me.text(), 
     $myfilter = $('.filters .filter-clear:contains("'+ mytext +'")'); 

    doSomething($me); 
}); 

$searchedfor.find('.filter-clear').bind('click',function(){ 
    $searchedfor.fadeOut(); 
});