Question

J'utilise le plugin ajaxify.js https://github.com/browserstate/ajaxify teneur en charge dynamique.

J'ai un certain nombre de fonctions de click que je lie le document prêt, mais je dois mettre plus ces fonctions à l'intérieur de ma fonction ajax charge de re-lier les événements de clic au contenu nouvellement ajouté. Je l'avais essayé d'utiliser un seul ensemble de fonctions de live auparavant, mais ils ne travaillaient pas.

En tout cas j'ai le code suivant deux fois, une fois à l'intérieur d'un document.ready(function(){ }) et encore une fois à l'intérieur de ajaxify.js après le chargement de contenu.

Je sais qu'il est superflu, mais je ne suis pas sûr de savoir comment s'y prendre pour écrire les fonctions qu'une seule fois pour que je puisse « comprendre » les ailleurs. Comment puis-je optimiser ces fonctions pour que je puisse les consolider et de les utiliser à nouveau d'une manière efficace?

Merci!

        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();
        }); 
Était-ce utile?

La solution

Définir une nouvelle fonction devrait fonctionner (je ne l'ai pas le tester):

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();
});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top