[SPIP Zone] [AJAX] Ecouteur JS après chargement

Bonjour, 

Je souhaite executer un script JS sur mes pages (un script qui sert à baliser toutes les valeurs numériques de la page avec un span)
et faire un refresh de ce script au moment du chargement ajax (paginations ou autres), car un script ne s'execute qu'une fois au chargement de la page
Je ne sais pas comment faire, enfin si je pourrais faire un truc pas clean mais j'aimerais faire ça bien :)
Si vous avez une petite idée.

Merci d'avance

Freed

Dans ton squelette rechargé en ajax : Après, il est sans doute possible de faire plus propre car le script est rechargé intégralement à chaque appel AJAX et n’est pas minifié. jean marie

Non…

Il te faut définir ta fonction (très certainement déjà fait)

Puis ajouter dans le document ready onAjaxLoad(nom_de_ta_fonction);

Cela rejouera ta fonction à chaque chargement ajax normalement.

Le ven. 7 août 2015 à 12:23, Jean Marie Grall <jeanmarie.listes@cousumain.info> a écrit :

Salut,

Je souhaite executer un script JS sur mes pages (un script qui sert à baliser toutes les valeurs numériques de la page avec un span)
et faire un refresh de ce script au moment du chargement ajax (paginations ou autres), car un script ne s'execute qu'une fois au chargement de la page
Je ne sais pas comment faire, enfin si je pourrais faire un truc pas clean mais j'aimerais faire ça bien :)
Si vous avez une petite idée.

Dans ton squelette rechargé en ajax :

Après, il est sans doute possible de faire plus propre car le script est rechargé intégralement à chaque appel AJAX et n’est pas minifié.

jean marie


spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

Bonjour,

J'avais proposé une façon d'organiser ses fonctions javascript pour
SPIP, notamment avec l'histoire du rechargement ajax.

A voir ici Exemple d’organisation des fonctions javacript

C'est une structure que j'ai fini par adopter, mais d'autres sont possibles.

Voilà ++

Le 07/08/2015 06:07, Freed a écrit :

Bonjour,

Je souhaite executer un script JS sur mes pages (un script qui sert à
baliser toutes les valeurs numériques de la page avec un span)
et faire un refresh de ce script au moment du chargement ajax
(paginations ou autres), car un script ne s'execute qu'une fois au
chargement de la page
Je ne sais pas comment faire, enfin si je pourrais faire un truc pas
clean mais j'aimerais faire ça bien :slight_smile:
Si vous avez une petite idée.

Merci d'avance

Freed

----
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

Merci ! Cette idée me plait bien ! je ne connaissais pas cette fonction !

Mais malheureusement j’obtiens cette erreur :

TypeError: jQuery.spip.load_handlers[i].apply is not a function
http://localhost/www-fleve/prive/javascript/ajaxCallback.js
Line 32

Mon code (squelettes/javascript/scripts.js) intégré en pied de page

$(document).ready(function(){

jQuery.fn.wrapNumbers = function () {
$(this).contents()
.filter(function() { return this.nodeType != Node.TEXT_NODE; })
.each(function () { $(this).wrapNumbers(); });
$(this).contents()
.filter(function() { return this.nodeType == Node.TEXT_NODE; })
.each(function () {
$(this).replaceWith(
$(this).text().replace(/(\d+)/g, ‹ $1 ›)
);
});
}

$(‹ body ›).wrapNumbers();
onAjaxLoad(‹ wrapNumbers ›);

});

Cdt,

Freed

Le 2015-08-07 12:24, Quentin Drouet a écrit :

Non…

Il te faut définir ta fonction (très certainement déjà fait)

Puis ajouter dans le document ready onAjaxLoad(nom_de_ta_fonction);

Cela rejouera ta fonction à chaque chargement ajax normalement.

Le ven. 7 août 2015 à 12:23, Jean Marie Grall <jeanmarie.listes@cousumain.info> a écrit :

Salut,

Je souhaite executer un script JS sur mes pages (un script qui sert à baliser toutes les valeurs numériques de la page avec un span)
et faire un refresh de ce script au moment du chargement ajax (paginations ou autres), car un script ne s'execute qu'une fois au chargement de la page
Je ne sais pas comment faire, enfin si je pourrais faire un truc pas clean mais j'aimerais faire ça bien :)
Si vous avez une petite idée.

Dans ton squelette rechargé en ajax :

Après, il est sans doute possible de faire plus propre car le script est rechargé intégralement à chaque appel AJAX et n’est pas minifié.

jean marie


spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

Ceci devrait fonctionner

$(document).ready(function(){

jQuery.fn.wrapNumbers = function () {
$(this).contents()
.filter(function() { return this.nodeType != Node.TEXT_NODE; })
.each(function () { $(this).wrapNumbers(); });
$(this).contents()
.filter(function() { return this.nodeType == Node.TEXT_NODE; })
.each(function () {
$(this).replaceWith(
$(this).text().replace(/(\d+)/g, ‹ $1 ›)
);
});
}

var wrap_numbers = function(){$(‹ body ›).wrapNumbers();}

onAjaxLoad(wrapNumbers);

});

Le ven. 7 août 2015 à 14:42, Freed <contact@freedfromparis.com> a écrit :

Merci ! Cette idée me plait bien ! je ne connaissais pas cette fonction !

Mais malheureusement j’obtiens cette erreur :

TypeError: jQuery.spip.load_handlers[i].apply is not a function
http://localhost/www-fleve/prive/javascript/ajaxCallback.js
Line 32

Mon code (squelettes/javascript/scripts.js) intégré en pied de page

$(document).ready(function(){

jQuery.fn.wrapNumbers = function () {
$(this).contents()
.filter(function() { return this.nodeType != Node.TEXT_NODE; })
.each(function () { $(this).wrapNumbers(); });
$(this).contents()
.filter(function() { return this.nodeType == Node.TEXT_NODE; })
.each(function () {
$(this).replaceWith(
$(this).text().replace(/(\d+)/g, ‹ $1 ›)
);
});
}

$(‹ body ›).wrapNumbers();
onAjaxLoad(‹ wrapNumbers ›);

});

Cdt,

Freed

Le 2015-08-07 12:24, Quentin Drouet a écrit :

Non…

Il te faut définir ta fonction (très certainement déjà fait)

Puis ajouter dans le document ready onAjaxLoad(nom_de_ta_fonction);

Cela rejouera ta fonction à chaque chargement ajax normalement.

Le ven. 7 août 2015 à 12:23, Jean Marie Grall <jeanmarie.listes@cousumain.info> a écrit :

Salut,

Je souhaite executer un script JS sur mes pages (un script qui sert à baliser toutes les valeurs numériques de la page avec un span)
et faire un refresh de ce script au moment du chargement ajax (paginations ou autres), car un script ne s'execute qu'une fois au chargement de la page
Je ne sais pas comment faire, enfin si je pourrais faire un truc pas clean mais j'aimerais faire ça bien :)
Si vous avez une petite idée.

Dans ton squelette rechargé en ajax :

Après, il est sans doute possible de faire plus propre car le script est rechargé intégralement à chaque appel AJAX et n’est pas minifié.

jean marie


spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

Pour ceux que ça intéresse :

En effet, j’ai essayé ça entre temps (qui ressemble à ce que tu me proposes)

jQuery.fn.wrapNumbers = function () {
$(this).contents()
.filter(function() { return this.nodeType != Node.TEXT_NODE; })
.each(function () { $(this).wrapNumbers(); });
$(this).contents()
.filter(function() { return this.nodeType == Node.TEXT_NODE; })
.each(function () {
$(this).replaceWith(
$(this).text().replace(/(\d+)/g, ‹ $1 ›)
);
});
}
function initWrapNumbers() {
$(‹ body ›).wrapNumbers();
}

onAjaxLoad(initWrapNumbers);

ça fonctionne

Merci :slight_smile:

Freed

Le 2015-08-07 14:44, Quentin Drouet a écrit :

Ceci devrait fonctionner

$(document).ready(function(){

jQuery.fn.wrapNumbers = function () {
$(this).contents()
.filter(function() { return this.nodeType != Node.TEXT_NODE; })
.each(function () { $(this).wrapNumbers(); });
$(this).contents()
.filter(function() { return this.nodeType == Node.TEXT_NODE; })
.each(function () {
$(this).replaceWith(
$(this).text().replace(/(\d+)/g, ‹ $1 ›)
);
});
}

var wrap_numbers = function(){$(‹ body ›).wrapNumbers();}

onAjaxLoad(wrapNumbers);

});

Le ven. 7 août 2015 à 14:42, Freed <contact@freedfromparis.com> a écrit :

Merci ! Cette idée me plait bien ! je ne connaissais pas cette fonction !

Mais malheureusement j’obtiens cette erreur :

TypeError: jQuery.spip.load_handlers[i].apply is not a function
http://localhost/www-fleve/prive/javascript/ajaxCallback.js
Line 32

Mon code (squelettes/javascript/scripts.js) intégré en pied de page

$(document).ready(function(){

jQuery.fn.wrapNumbers = function () {
$(this).contents()
.filter(function() { return this.nodeType != Node.TEXT_NODE; })
.each(function () { $(this).wrapNumbers(); });
$(this).contents()
.filter(function() { return this.nodeType == Node.TEXT_NODE; })
.each(function () {
$(this).replaceWith(
$(this).text().replace(/(\d+)/g, ‹ $1 ›)
);
});
}

$(‹ body ›).wrapNumbers();
onAjaxLoad(‹ wrapNumbers ›);

});

Cdt,

Freed

Le 2015-08-07 12:24, Quentin Drouet a écrit :

Non…

Il te faut définir ta fonction (très certainement déjà fait)

Puis ajouter dans le document ready onAjaxLoad(nom_de_ta_fonction);

Cela rejouera ta fonction à chaque chargement ajax normalement.

Le ven. 7 août 2015 à 12:23, Jean Marie Grall <jeanmarie.listes@cousumain.info> a écrit :

Salut,

Je souhaite executer un script JS sur mes pages (un script qui sert à baliser toutes les valeurs numériques de la page avec un span)
et faire un refresh de ce script au moment du chargement ajax (paginations ou autres), car un script ne s'execute qu'une fois au chargement de la page
Je ne sais pas comment faire, enfin si je pourrais faire un truc pas clean mais j'aimerais faire ça bien :)
Si vous avez une petite idée.

Dans ton squelette rechargé en ajax :

Après, il est sans doute possible de faire plus propre car le script est rechargé intégralement à chaque appel AJAX et n’est pas minifié.

jean marie

spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone


 
**Frédéric Levé** 22, rue de la Chine 75020 Paris [contact@freedfromparis.com](mailto:contact@freedfromparis.com) Tél. : 06 83 96 95 82

Salut Quentin,

merci pour cette solution, je viens de la mettre en place, c’est effectivement bcp mieux !

jean marie