jquery + javascript: консолидация дублирования функций между Document.Ready и Ajax Load

StackOverflow https://stackoverflow.com/questions/9344353

Вопрос

Я использую плагин ajaxify.js https://github.com/browserstate/ajaxify Для динамической загрузки контента.

У меня есть несколько 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();
        }); 
Это было полезно?

Решение

Определение новой функции должна работать (я не проверял ее):

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();
});
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top