Domanda

Sto usando il plugin Ajaxify.js https://github.com/browsertate/ajaxify Per caricare il contenuto in modo dinamico.

Ho un numero di click Funzioni che leggo sul documento pronti, ma devo inoltre inserire quelle funzioni all'interno della mia funzione di caricamento AJAX per rinunciare agli eventi di clic sul contenuto appena aggiunto. Avevo provato a usare un singolo set di live Funzioni in precedenza ma non hanno funzionato.

Comunque ho il seguente codice due volte, una volta all'interno di a document.ready(function(){ }) e ancora una volta all'interno di ajaxify.js dopo il caricamento del contenuto.

So che è superfluo, ma non sono sicuro di come scrivere le funzioni solo una volta così posso "includerle" altrove. Come posso ottimizzare queste funzioni in modo da poterle consolidarle e usarle di nuovo in modo efficiente?

Grazie!

        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();
        }); 
È stato utile?

Soluzione

Definire una nuova funzione dovrebbe funzionare (non l'ho testata):

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();
});
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top