jQuery + javaScript: consolidar funciones duplicadas entre documento.ready y Ajax Load
-
27-10-2019 - |
Pregunta
Estoy usando el complemento Ajaxify.js https://github.com/browserstate/ajaxify cargar contenido dinámicamente.
Tengo varios click
Funciones que encuentro en el documento listo, pero tengo que colocar además esas funciones dentro de mi función de carga AJAX para volver a unir los eventos de clic al contenido recién agregado. Había intentado usar un solo conjunto de live
Funciones anteriormente pero no funcionaron.
De todos modos tengo el siguiente código dos veces, una vez dentro de un document.ready(function(){ })
y una vez más dentro de Ajaxify.js después de que se carga el contenido.
Sé que es superfluo, pero no estoy seguro de cómo escribir las funciones solo una vez para que pueda "incluirlas" en otro lugar. ¿Cómo puedo optimizar estas funciones para que pueda consolidarlas y usarlas nuevamente de manera eficiente?
¡Gracias!
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();
});
Solución
Definir una nueva función debería funcionar (no la probé):
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();
});