Voir le flux RSS

danielhagnoul

Enchaîner des fonctions

Noter ce billet
par , 26/10/2014 à 04h00 (721 Affichages)
On place simplement les fonctions dans un objet JS, chaque fonction devant se terminer par un return this;.

Dans cet exemple, un clic sur n'importe lequel des 6 boutons déclenche simplement l'exécution des fonctions 1 à 6 contenues dans l'objet.

Vos besoins seront certainement plus complexes que l'exécution de fonctions dans un ordre immuable, mais le principe restera le même.

Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
<button id="btn1">Btn 1</button>
<button id="btn2">Btn 2</button>
<button id="btn3">Btn 3</button>
<button id="btn4">Btn 4</button>
<button id="btn5">Btn 5</button>
<button id="btn6">Btn 6</button>

Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
// Un objet JS contenant les fonctions
var ObjMonPropbleme = {
    "btn1" : function ObjMonProbleme_btn1( event ){
 
        // debug, console, touche F12
        // Date.now() donne le temps en millisecondes
        console.log( Date.now(), "btn1 : event id = ", event.target.id );
 
        // Cette boucle de calcul ne sert qu'à perdre du temps pour mettre 
        // en évidence avec Date.now() que les fonctions s'exécutent bien 
        // une par une.
        for( var k = 0; k < 999999999; k++ ){ var r = k/999; }
 
        // indispensable pour pouvoir chaîner les appels
        return this;
    },
    "btn2" : function ObjMonProbleme_btn2( event ){
        console.log( Date.now(), "btn2 : event timestamp = ", event.timeStamp );
 
        for( var k = 0; k < 999999999; k++ ){ var r = k/999; }
 
        return this;
    },
    "btn3" : function ObjMonProbleme_btn3( event ){
        console.log( Date.now(), "btn3 : event type = ", event.type );
 
        for( var k = 0; k < 999999999; k++ ){ var r = k/999; }
 
        return this;        
    },
    "btn4" : function ObjMonProbleme_btn4( event ){
        console.log( Date.now(), "btn4 : event target innerText = ", event.target.innerText );
 
        for( var k = 0; k < 999999999; k++ ){ var r = k/999; }
 
        return this;
    },
    "btn5" : function ObjMonProbleme_btn5( event ){
        console.log( Date.now(), "btn5 : event target local name = ", event.target.localName );
 
        for( var k = 0; k < 999999999; k++ ){ var r = k/999; }
 
        return this;
    },
    "btn6" : function ObjMonProbleme_btn6( event ){
        console.log( Date.now(), "btn6 : event x et y = ", event.x, event.y );
 
        for( var k = 0; k < 999999999; k++ ){ var r = k/999; }
 
        return this;
    }
};
 
// on sélectionne les boutons
var btns = document.querySelectorAll( "[id^='btn']" ),
    btnsLength = btns.length;
 
// la fonction qui gère l'événement    
function handlerBtnEventClick( event ){
 
    // debug, console, touche F12
    console.log( event );
 
    // les fonctions s'exécutent une par une
    // c'est return this qui permet de chaîner les appels
 
    ObjMonPropbleme.btn1( event )
        .btn2( event )
        .btn3( event )
        .btn4( event )
        .btn5( event )
        .btn6( event );
};
 
// on ajoute un gestionnaire d'événement sur chaque bouton, 
for( var i = 0; i < btnsLength; i++ ){
    btns[ i ].addEventListener( "click", handlerBtnEventClick, false );
}

Envoyer le billet « Enchaîner des fonctions » dans le blog Viadeo Envoyer le billet « Enchaîner des fonctions » dans le blog Twitter Envoyer le billet « Enchaîner des fonctions » dans le blog Google Envoyer le billet « Enchaîner des fonctions » dans le blog Facebook Envoyer le billet « Enchaîner des fonctions » dans le blog Digg Envoyer le billet « Enchaîner des fonctions » dans le blog Delicious Envoyer le billet « Enchaîner des fonctions » dans le blog MySpace Envoyer le billet « Enchaîner des fonctions » dans le blog Yahoo

Mis à jour 07/06/2015 à 13h00 par danielhagnoul

Catégories
Javascript , Développement Web

Commentaires