Exécuter en fonction jquery nouveau après l'appel ajax
Est-il possible d'exécuter un script à nouveau après un appel ajax?
J'ai un photoswipe (lightbox) jquery plug-in je l'appelle comme ceci:
jQuery(document).ready(function($){
if( $('.img-frame a').length > 0 ){
var myPhotoSwipe = $(".img-frame a").photoSwipe();
}
});
J'ai aussi un ajax " charger plus de postes de la fonction, et, évidemment, photoswipe ne cible pas les images chargées après le premier chargement de la page.
Je n'ai pas beaucoup ajax connaissances, toute aide à ce sujet? Grâce
Mise à JOUR: Voici le "charger plus" script:
jQuery(document).ready(function($) {
//The number of the next page to load (/page/x/).
var pageNum = parseInt(djwd_load_posts.startPage) + 1;
//The maximum number of pages the current query can return.
var max = parseInt(djwd_load_posts.maxPages);
//The link of the next page of posts.
var nextLink = djwd_load_posts.nextLink;
/**
* Replace the traditional navigation with our own,
* but only if there is at least one page of new posts to load.
*/
if(pageNum <= max) {
//Insert the "More Posts" link.
$('#content')
.append('<div class="lp-placeholder-'+ pageNum +'"></div>')
.append('<p id="lp-load-posts" class="long-button"><a href="#">Load More Posts<i class="icon-chevron-down icon-large"></i></a></p>');
//Remove the traditional navigation.
$('#nav-below').remove();
}
/**
* Load new posts when the link is clicked.
*/
$('#lp-load-posts a').click(function() {
//Are there more posts to load?
if(pageNum <= max) {
//Show that we're working.
$(this).text('Loading posts...');
$('.lp-placeholder-'+ pageNum).load(nextLink + ' .post',
function() {
$( this ).hide().fadeIn(700);
//Update page number and nextLink.
pageNum++;
nextLink = nextLink.replace(/\/page\/[0-9]?/, '/page/'+ pageNum);
//Add a new placeholder, for when user clicks again.
$('#lp-load-posts')
.before('<div class="lp-placeholder-'+ pageNum +'"></div>')
//Update the button message.
if(pageNum <= max) {
$('#lp-load-posts a').text('Load More Posts');
} else {
$('#lp-load-posts a').text('No more posts to load.');
}
}
);
} else {
$('#lp-load-posts a').append('.');
}
return false;
});
});
Je l'appelle dans WordPress functions.php de cette façon:
function djwd_ajax_load_init() {
global $wp_query;
if( !is_singular() ) {
wp_enqueue_script('ajax-load-posts', get_template_directory_uri() . '/js/ajax-load-posts.js', array('jquery'), true );
$max = $wp_query->max_num_pages;
$paged = ( get_query_var('paged') > 1 ) ? get_query_var('paged') : 1;
wp_localize_script(
'ajax-load-posts',
'djwd_load_posts',
array(
'startPage' => $paged,
'maxPages' => $max,
'nextLink' => next_posts($max, false)
)
);
}
}
add_action('template_redirect', 'djwd_ajax_load_init');
comment faites-vous de l'appel ajax?
Déplacez votre code de fonction et d'appeler cette fonction dans
J'ai édité la question avec toutes les code
Déplacez votre code de fonction et d'appeler cette fonction dans
$(document).ready()
et après une requête ajaxJ'ai édité la question avec toutes les code
OriginalL'auteur djwd | 2012-12-14
Vous devez vous connecter pour publier un commentaire.
Le mettre dans une fonction, appel à sur pageload et dans votre appel ajax.
Par ailleurs, si vous ne pas besoin de la variable myPhotoSwipe, alors vous n'avez pas à le définir. Vous êtes également à l'aide de
$('.img-frame a')
deux fois, afin de mettre en cache le résultat.Et de votre charge d'appel:
J'ai mis à jour ma réponse, vous êtes à l'aide de $.charge, pas de $.ajax.
Ouais, c'était qu'il me manquait. Ok j'y suis presque, il ne fonctionne que si je double la fonction complète dans ajax-load-more.js, sinon je vous setMyPhotoSwipe(); n'est pas défini. (la première photoswipe appel c'est dans un autre fichier js). Mais si je double la fonction, j'obtiens cette erreur non Interceptée Code.PhotoSwipe.activateInstance: Impossible d'instance active comme une autre instance est déjà actif pour cet objectif. Même si tout fonctionne, je ne pense pas que c'est très "élégante"
(désolé, j'ai essayé de formater mieux mon commentaire mais j'ai manqué de 5 minutes de temps)
Eh bien vous avez de la marque de ces liens déjà chargé avant, j'ai mis à jour ma réponse, voir la fonction
setPhotoSwipe()
. Concernant votre erreur: mettre la définition de la fonction à l'extérieur dejQuery(document).ready
.OriginalL'auteur iappwebdev
Il n'y a pas de délégation pour le plugin, c'est à l'auteur du plugin pour l'incorporer. Pourquoi ne pas tricher: (désolé, ne peut pas tester le code, et pas sûr de ses pertinente pour photoSwipe plugin)
Je ne sais pas ce plugin, mais je suis sûr que vous pouvez essayer
BTW votre réponse est l'homme génial! et +1 de ma part 🙂 je n'ai pas essayé mais je pense que c'est correct!
Merci c'était une bonne idée, mais malheureusement ne fonctionne pas
OriginalL'auteur A. Wolff
OriginalL'auteur Muhammad Talha Akbar
Je suggère ci-dessous
également appeler le même dans les appels ajax
OriginalL'auteur Murali Murugesan
Comme Morpheus dit.
Créer une autre fonction que de mettre votre code dans que.
Vous pouvez appeler cette fonction à l'intérieur de votre
$(document).ready()
Ensuite utiliser la même fonction dans votre ajax voie du succès (voir la documentation: http://api.jquery.com/jQuery.ajax/).
Alternativement, vous pouvez utiliser ceci: http://api.jquery.com/ajaxStop/
Il vous facilitera l'utilisation de la même fonction lorsque votre chaque Appel Ajax s'arrête.
OriginalL'auteur Panagiotis Palladinos
Désolé, je suis un débutant en jquery... Comment sur l'utilisation de ajaxComplete()
http://api.jquery.com/ajaxcomplete/
Une fois que j'avais à exécuter une fonction après l'appel ajax... et ajaxComplete() a fait le tour...
OriginalL'auteur Yogesh