Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/12/2011, 14h31   #1
Membre du Club
 
Inscription : février 2007
Messages : 184
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 184
Points : 54
Points : 54
Par défaut Raccourcir un morceau de script

Bonjour a tous.

J'utilise le google track pour calculer ne nombre de clique sur différents liens de mon site.

Tout fonctionne cependant j'ai un énorme rappel de toujours la même chose dans mon code et je me demandai comment le rendre plus générique.

UN exemple serra plus parlant voila ce que j'ai dans ma page
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
//Tracker Analytics maps 
            $('#exp').click(function(){
                _gaq.push(['_trackEvent', 'outbound', 'click', '/'+langId+'url1']);
            });
            $('#hip').click(function(){
                _gaq.push(['_trackEvent', 'outbound', 'click', '/'+langId+'url2']);
            });
            $('#com').click(function(){
                _gaq.push(['_trackEvent', 'outbound', 'click', '/'+langId+'url3']);
            });
 
            $('#eat').click(function(){
                _gaq.push(['_trackEvent', 'outbound', 'click', '/'+langId+'url4']);
            });
            $('#drink').click(function(){
                _gaq.push(['_trackEvent', 'outbound', 'click', '/'+langId+'url5']);
            });
            $('#dance').click(function(){
                _gaq.push(['_trackEvent', 'outbound', 'click', '/'+langId+'url6']);
            });
            $('#surprise').click(function(){
                _gaq.push(['_trackEvent', 'outbound', 'click', '/'+langId+'url7']);
            });
Comme vous le voyez j'utilise au clique sur mes différents liens toujours la même chose avec juste l'url qui change.
je suis sur qu'il y a quelque chose de plus propre a faire comme lancer une fonction au clique sur mes liens avec en paramètre l'url par exemple mais je ne sais pas le faire .

Pouvez vous m'aider?

Merci par avance
orphen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2011, 15h40   #2
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 872
Points : 1 381
Points : 1 381
Code :
1
2
3
4
5
6
var idList = ['#exp','#hip','#com','#eat','#drink','#dance','#surprise'], i = 0;
while(i < idList.length){
    $(idList[i]).click(function(){
        _gaq.push(['_trackEvent', 'outbound', 'click', '/'+langId+'url'+ ++i]);
    });
}
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2011, 15h51   #3
Membre du Club
 
Inscription : février 2007
Messages : 184
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 184
Points : 54
Points : 54
Parcque mes liens ne sont pas les un a la suite des autres, et parcque les url ne sont pas url1 url2 et.
J'ai mit ça car je n'ai pas le droit de les diffuser.

Bref ma question est toujours la même.

Est-ce possible de faire un code plus court et plus propre comme la fonction avec le paramètre dont je parle dans mon message?

Et si oui quelqu'un peut m'expliquer comment le faire?

Merci par avance.
orphen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2011, 16h08   #4
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 872
Points : 1 381
Points : 1 381
Citation:
Envoyé par Willpower Voir le message
Code :
1
2
3
4
5
6
7
8
var idList = ['#exp','#hip','#com','#eat','#drink','#dance','#surprise'], i = 0,
urlList = ['url1','url2','url3','url4','url5','url6','url7']
while(i < idList.length){
    $(idList[i]).click(function(){
        _gaq.push(['_trackEvent', 'outbound', 'click', '/'+langId+urlList[i]);
    });
    i++;
}
Une boucle revient un peu au même qu'une fonction qui surchargerai tous les liens et qui trouverai l'url correspondant à son id dans un tableau. (aussi long à écrire et pratiquement la même efficacité, dépendant de l'usage. ici on fait une boucle initialisatrice(?ça existe comme mot?) pour tous les liens, tandis qu'avec la fonction, elle devrait chercher à chaque clique son lien dans un tableau.)
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2011, 16h15   #5
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 872
Points : 1 381
Points : 1 381
en plus pro(pre) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var elemList = [
    {id:'#exp',url:'url1'},
    {id:'#hip',url:'url2'},
    {id:'#com',url:'url3'},
    {id:'#eat',url:'url4'},
    {id:'#drink',url:'url5'},
    {id:'#dance',url:'url6'},
    {id:'#surprise',url:'url7'}
], i = 0;
while(i < elemList.length){
    $(elemList[i].id).click(function(){
        _gaq.push(['_trackEvent', 'outbound', 'click', '/'+langId+elemList[i].url);
    });
    i++;
}
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2011, 16h18   #6
Membre du Club
 
Inscription : février 2007
Messages : 184
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 184
Points : 54
Points : 54
Merci beaucoup pour ton aide je vais essayer ceci.
orphen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2011, 16h28   #7
Membre du Club
 
Inscription : février 2007
Messages : 184
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 184
Points : 54
Points : 54
Excuse moi je te pose une dernière question d’après ce que j'ai compris quand je clique sur un lien ça va récupérer son le contenue de son attribut id="".

Mais je ne vois pas ou est ce que c'est gérer.

Est-ce le .id de elemList[i].id ?

Si c'est ça je ne savais pas qu'on pouvais récupérer un id de cette façon.
orphen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2011, 17h35   #8
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 872
Points : 1 381
Points : 1 381
j'ai repris ton code qui semble utiliser jQuery ou une librairie similaire:

$('#exp')
=> renvoit (en jquery) l'objet du dom (de la page) qui a pour id la valeur 'exp'.

$('#exp').click(function(){
=> ajoute une fonction sur l'élément qui est déclenché lors du clique.


j'ai donc simplement créé un liste (array) regroupant tous tes liens et j'ai regroupé tes exécutions dans une simple boucle (while).

pour chaque element de la liste
on récupére l'élement dom correspond via son id
on ajoute une fonction lors de l'événement clique.
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2011, 17h38   #9
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 872
Points : 1 381
Points : 1 381
ce sont des liens ajax ou pas ?

parce qu'en fait, si tu veux juste logger le href des liens, tu peux faire (pour tous les liens du site) remplacer tout le code par cette ligne :

Code :
1
2
3
$('a').click(function(){
     _gaq.push(['_trackEvent', 'outbound', 'click', '/'+langId+$(this).attr('href'));
});
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2011, 17h40   #10
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 872
Points : 1 381
Points : 1 381
et si tu as des liens qui peuvent être créé et ajouté dynamyquement par la suite (après que la page ait été générée) :

Code :
1
2
3
$('a').live('click',function(){
     _gaq.push(['_trackEvent', 'outbound', 'click', '/'+langId+$(this).attr('href'));
});
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 09h33   #11
Membre du Club
 
Inscription : février 2007
Messages : 184
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 184
Points : 54
Points : 54
Salut,

alors il y a bien un traitement en Ajax mais pas sur les liens.

J'ai testé ton code et ca me sort elemList[i] is undefined alors qu'a priori il est bien défini
orphen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 09h48   #12
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 071
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 071
Points : 45 202
Points : 45 202
tu ne dois pas le faire sur le document.ready ...
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 13h06   #13
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 872
Points : 1 381
Points : 1 381
heu c'est impossible que les elemList[i] soit indéfinis (dom ready ou non) si tu fais :

Code :
1
2
3
4
5
6
7
8
9
var elemList = [
    {id:'#exp',url:'url1'},
    {id:'#hip',url:'url2'},
    {id:'#com',url:'url3'}
], i = 0;
while(i < elemList.length){
    //  elemList[i] NE SERA JAMAIS "UNDEFINED" ici.
    i++;
}
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h13.


 
 
 
 
Partenaires

Hébergement Web