IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Supprimer un listener pour en mettre un autre a la place


Sujet :

JavaScript

  1. #1
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut Supprimer un listener pour en mettre un autre a la place
    re
    bonjour a tous
    j'ai résolu mon probleme en utilisant le id dans les arguments

    j'ai un autre probleme
    comment suuprimer un listener pour en mettre un autre a la place
    je m'explique j'ai une palette couleur dynamiquement créée

    l'affichage est commandé par deux bouton (forecolor et backcolor) selon le bouton le listener aura un argument différent
    j'ai bien tenter quelque chose mais ca ne semble pas bon

    c'est la fonction affiche palette

    Code html : 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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    <!DOCTYPE HTML >
    <html lang="fr">
    <head>
        <!--meta charset="utf-8"-->
        <title>patrick WYSIWYG html </title>
        <meta http-equiv="X-UA-Compatible" content="IE=10">
     
    <style> html {
     width: 100%;
     height: 100%;
    }
    body {
     display: flex;
     flex-direction: column;
     box-sizing: border-box;
     width: 100%;
     height: 100%;
     border: 1px solid black;
     margin: 0;
     padding: 0;
     overflow: hidden;
    }
    #cadre_cmd {
     padding: 3px;
     background: linear-gradient(to right, rgba(247, 150, 50, 1) 0%, rgba(217, 237, 242, 1) 40%, rgba(150, 180, 250, 1) 100%);
     border: 1px solid yellow;
     min-height: 40px;
    }
    #divrouge {
     position: relative;
     flex: 1 0 auto;
     font-size: 0;
     border: 1px solid red;
    }
    #editeur {
     position: absolute;
     top: 0;
     right: 0;
     bottom: 0;
     left: 0;
     overflow: auto;
     font-size: 18px;
     border: 1px solid green;
    }
    .fondbouton {
     display: block;
     background-color: #F2F2F2;
     width: 25px;
     height: 25px;
     margin-left: 5px;
     margin-top: 3px;
     border: 1px solid black;
     float: left;
     border-radius: 7px;
     overflow: hidden;
    }
    .bouton {
     width: 104%;
     height: 102%;
     margin-left: 2px;
    }
    .fondbouton:hover {
     border: 1px solid red;
     
    }
    #palette {
     background-color: gray;
     font-size=1px;
     display: inline-block;
     box-sizing: border-box;
     position: absolute;
     width: 225px;
     min-height:160px;
            top: 40px;
     left: 5px;
            padding:5px; 
            border: 1px solid black;
    }
    .Bcolor {
     flex: 1 1 auto;
            box-sizing: border-box;
     font_size: 0px;
     fload: left;
     width: 18px;
     height: 18px;
     margin-top: 1px;
     margin-left: 3px;
     border: 1px solid white;
    }
    #fname {
     position: absolute;
     top: 30px;
     left: 120px;
    }
    #fsize {
     position: absolute;
     top: 30px;
     left: 145px;
     width: 80px;
    }
    @media print {
     #cadre_cmd {
      visibility: hidden;
      height: 0px
     }
     #editeur {
      top: 0px;
      border: 0px;
     }
     body {
      border: 0px;
     }
     #divrouge {
      border: 0px;
     }
    }
    p {
     margin: 0;
    }
    </style>
    <script type="text/javascript">
        var editeur;
        var panne;
        var palet;
        var Bbold = ["execCom", "bold", "false", "null", "bold", 113, "Texte en gras"];
        var Bitalic = ["execCom", "italic", "false", "null", "italic", "114", "Mettre le texte de la selection en italic"];
        var Bunderline = ["execCom", "underline", "false", "null", "underline", "115", "Souligner le texte"];
        var BfontName = ["listeF", "fontName", "null", "null", "fontName", "1063", "Afficher la liste des font name"];
        var BfontSize = ["listeFZ", "fontSize", "null", "null", "fontSize", "1061", "Afficher la liste des font size"];
        var BforeColor = ["affichepalette", "foreColor", "null", "null", "foreColor", "1858", "Afficher la palette des font color"];
        var BbackColor = ["affichepalette", "backColor", "null", "null", "backColor", "1031", "Texte avec le Fond en couleur"];
        var Bindent = ["execCom", "indent", "false", "null", "indent", "3161", "indenter le texte"];
        var Boutdent = ["execCom", "outdent", "false", "null", "outdent", "3162", "outdenter le texte"];
        var Bsubscript = ["execCom", "subscript", "false", "null", "subscript", "333", "Mettre en souexposant le texte sélectionné"];
        var Bsuperscript = ["execCom", "superscript", "false", "null", "superscript", "333", "Mettre le texte sélectionné en exposant"];
        var Bcopy = ["execCom", "copy", "false", "null", "copy", "19", "Copier la selection "];
        var Bcut = ["execCom", "cut", "false", "null", "cut", "21", "Couper la selection"];
        var Bpaste = ["execCom", "paste", "false", "true", "paste", "22", "coller"];
        var BcreateLink = ["execCom", "createLink", "false", "null", "createLink", "1015", "Mettre un lien sur la selection"];
        var Bunlink = ["execCom", "unlink", "false", "null", "unlink", "1576", "Suprimer le lien "];
        var BinsertHorizontalRule = ["execCom", "insertHorizontalRule", "false", "null", "insertHorizontalRule", "33", "Tirer un trait"];
        var BinsertOrderedList = ["execCom", "insertOrderedList", "false", "null", "insertOrderedList", "439", "insérer ou transformer la selection en liste ordonnée"];
        var BinsertUnorderedList = ["execCom", "insertUnorderedList", "false", "null", "insertUnorderedList", "439", "insérer ou transformer la selection en liste non ordonnée"];
        var BjustifyCenter = ["execCom", "justifyCenter", "false", "null", "justifyCenter", "122", "Centrer le texte"];
        var BjustifyLeft = ["execCom", "justifyLeft", "false", "null", "justifyLeft", "120", "Aligner le texte a gauche "];
        var BjustifyRight = ["execCom", "justifyRight", "false", "null", "justifyRight", "121", "Aligner le texte a droite"];
        var Bredo = ["execCom", "redo", "false", "null", "redo", "333", "refaire"];
        var removeFormat = ["execCom", "removeFormat", "false", "null", "removeFormat", "108", "suprimer le formatage du texte"];
        var BstrikeThrough = ["execCom", "strikeThrough", "false", "null", "strikeThrough", "333", "Barrer le texte sélectionné"];
        var Bundo = ["execCom", "undo", "false", "null", "undo", "333", "Annuler la dernier operation"];
        var Binsertimg = ["bycommandvba", "insertimage", "null", "insertimage", "682", "inserer une image "];
        var Bhtml = ["afficherhtml", "afficherhtml", "null", "null", "afficherhtml", "1922", "Afficher le code HTML"];
        var Bouvrir = ["bycommandvba", "ouvrirfichier", "null", "null", "Ouvrir", "23", "Ouvrir un fichier"];
        var Bimprimer = ["execCom", "print", "false", "null", "print", "4", "Imprimer le document"];
        var Benregistrer = ["bycommandvba", "enregistrer", "null", "null", "Enregistrer", "3", "enregistrer le document"];
        var Bnouveau = ["nouveau", "nouveau", "null", "null", "nouveau", "2520", "Nouveau document"];
        var Blayer = ["inserdiv", "ajouterdiv", "null", "null", "ajouterdiv", "178", "Ajouter un div"];
        var Bapercu = ["apercu", "apercu", "null", "null", "apercu", "109", "Apercu dans une page unique"];
        var coul = ["FFFFFF", "FFCCCC", "FFCC99", "FFFF99", "FFFFCC", "99FF99", "99FFFF", "CCFFFF", "CCCCFF", "FFCCFF", "CCCCCC", "FF6666", "FF9966", "FFFF66", "FFFF33", "66FF99", "33FFFF", "66FFFF", "9999FF", "FF99FF", "C0C0C0", "FF0000", "FF9900", "FFCC66", "FFFF00", "33FF33", "66CCCC", "33CCFF", "6666CC", "CC66CC", "999999", "CC0000", "FF6600", "FFCC33", "FFCC00", "33CC00", "00CCCC", "3366FF", "6633FF", "CC33CC", "666666", "990000", "CC6600", "CC9933", "999900", "009900", "339999", "3333FF", "6600CC", "993399", "333333", "660000", "993300", "996633", "666600", "006600", "336666", "000099", "333399", "663366", "000000", "330000", "663300", "663333", "333300", "003300", "003333", "000066", "330099", "330033"];
        function execCom(fonct, argmt1, argmt2) {
            alert(argmt2);
            if (argmt1 === "undefined") {
                argmt1 = false;
            }
            if (argmt2 === "undefined") {
                argmt2 = null;
            }
            document.execCommand(fonct, argmt1, argmt2);
        }
        /////////////////////////////////////////////////////////////// CREATION DE LA PLATFORME (LES DIVS)//////////////////////////// 
        function createplateform() {
            var div1 = document.createElement("DIV");
            div1.id = "cadre_cmd";
            document.body.appendChild(div1);
            var div2 = document.createElement("DIV");
            var div3 = document.createElement("DIV");
            div2.id = "divrouge";
            div3.id = "editeur";
            div3.setAttribute("contenteditable", "true");
            div3.innerHTML = "<p></p>";
            div2.appendChild(div3);
            document.body.appendChild(div2);
            editeur = div3 //on les a dispo dans tout le javascript par leur nom ils ont été déclarés en haut de script 
            panne = div1 //on les a dispo dans tout le javascript par leur nom ils ont été déclarés en haut de script 
        } //fin de fonction createplateform
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        ///////////////////////////////////////////////////////////////CREATION DES BOUTONS/////////////////////////////////////////////// 
        function createbouton(boutons) {
            console.log(boutons.length);
            for (var b = 0; b < boutons.length; b++) {
                var arr = boutons[b];
                console.log(arr.length);
                var fondbout = document.createElement("DIV");
                fondbout.className = "fondbouton";
                var argument0 = boutons[b][4];
                var bout = document.createElement("img");
                bout.id = "BT_" + boutons[b][4];
                bout.className = "bouton";
                bout.setAttribute("fonction", boutons[b][0]);
                bout.setAttribute("argumt1", boutons[b][1]);
                bout.setAttribute("argumt2", boutons[b][2]);
                bout.setAttribute("argumt3", boutons[b][3]);
                bout.setAttribute("src", "imageBouton\\" + boutons[b][4] + ".png");
                bout.setAttribute("title", boutons[b][6]);
                //console.log("BT_"+boutons[b][4] +  "   fonction : " + boutons[b][0] + "::" + boutons[b][1] + "::" + boutons[b][2] + "::" + boutons[b][3])
                fondbout.appendChild(bout)
                panne.appendChild(fondbout);
                if (boutons[b][0] === "execCom") {
                    bout.addEventListener("click", function() {
                        execCom(this.id.substring(3));
                    });
                }
                if (boutons[b][1] === "afficherhtml") {
                    bout.addEventListener("click", function() {
                        afficherhtml();
                    });
                }
                if (boutons[b][1] === "foreColor") {
                    bout.addEventListener("click", function() {
                        affichepalette("foreColor");
                    });
                }
                if (boutons[b][1] === "backColor") {
                    bout.addEventListener("click", function() {
                        affichepalette("backColor");
                    });
                }
            }
            createpalette();
        } //fin de fonction createbouton
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //////////////////////////////////////////////////////////CREATION DE LA PALETTE COULEUR//////////////////////////////////////////////
        function createpalette() {
            var pal = document.createElement("DIV");
            pal.id = "palette";
            pal.style.visibility = "hidden";
            for (var c = 0; c < coul.length; c++) {
                var btc = document.createElement("BUTTON");
                btc.className = "Bcolor";
                btc.style.backgroundColor = "#" + coul[c];
                btc.id = "btc_" + coul[c];
                pal.appendChild(btc);
            }
            document.body.appendChild(pal);
            palet = pal;
        }
        function affichepalette(mode) {
            palet.style.visibility = "visible";
            var btcs = palet.getElementsByTagName("BUTTON");
            for (var i = 0; i < btcs.length; i++) {
                btcs[i].removeEventListener("click", "execCom", false);
                btcs[i].addEventListener("click", function() {
                    execCom(mode, "false", "#" + this.id.substring(4));
                    palet.style.visibility = "hidden"
                });
            }
        }
        function afficherhtml() {
            var ed = document.getElementById("editeur");
            if (ed.contentEditable === "true") {
                ed.className = "noedit";
                ed.contentEditable = "false";
                ed.innerText = ed.innerHTML;
            } else {
                ed.className = "edit";
                ed.contentEditable = "true";
                ed.innerHTML = ed.innerText;
            }
        }
      
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    </script>
    </head>
    <body>
    <script>
    createplateform();
    boutons=[Bbold,Bitalic,Bunderline,BstrikeThrough,BfontName,BfontSize,BforeColor,BbackColor,BjustifyLeft,BjustifyCenter,BjustifyRight,Bindent,Boutdent,BinsertOrderedList,BinsertUnorderedList,Bsubscript,Bsuperscript ,removeFormat,BinsertHorizontalRule,BcreateLink,Bunlink,Blayer,Bundo,Bredo,Bcut,Bcopy,Bpaste,Bhtml,Bapercu,Bimprimer,Bnouveau,Bouvrir,Benregistrer ]
    createbouton(boutons);
    </script>
    </body>
    </html>

    si vous voulez les images de boutons il sont en pieces jointes
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 886
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 886
    Points : 3 725
    Points
    3 725

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    oui je l'ai cette page meme en pdf

    de toute facon ma methode est radicale je créée et detruit la palette au besoins c'a m'a trop filer le mal de crane

    il fonctionne
    tu l'a essayé?

    tiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    element.removeEventListener(type, listener, useCapture)
    que dois je mettre a la place de listener quand j'ai fait un add comme ca
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     bout.addEventListener("click", function() {
                       modepal="foreColor";
                       createpalette();
     
                    });

  4. #4
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Salut,

    removeEventListener ne reconnaît que des références de fonctions. Si tu lui passes une chaîne, il échoue silencieusement.

    Tu dois déclarer à l’avance les fonctions que tu attaches. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function uneFonctionAstucieusementNommee(event) {
      // ...
    }
     
    bidule.addEventListener("click", uneFonctionAstucieusementNommee);
     
    bidule.removeEventListener("click", uneFonctionAstucieusementNommee);
    Comme tu peux le voir ça te donne aussi une occasion pour donner un nom descriptif à tes fonctions, ce qui contribue à la lisibilité du code.

    Si tu as utilisé le troisième paramètre de addEventListener, tu dois passer le même à removeEventListener.

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    merci watilin

    j'ai eu la grosse surprise hiers soir que mon wysiwyg full dynamique ne pouvait pas fonctionner sur le suport VBA (attachEvent/addEventListener) sauf que
    en mode compatibilité IE 11: listener ;css 2 et 3
    en mode compatibilité ie 10 :attachEvent; css 2 et 3 mais toute les variables globales il les memorise pas
    en mode compatibilité IE 11 les element des array concernant les boutons ne sont pas mise a jours a chaque tours de boucle ce qui provoquait le meme listener avec la bonne fonction mais les argument identiques va savoir pourquoi j'ai tourner ca dans tout les sens dans celui avec addEvent Listener elles sont utilisées et fonctionnent puisqu'elles sont sensées representer un element de facon a ne pas devoir l'identidier a chaque besoins
    cela en plus des probleme de compatibilité a rendu tres difficile l'intégration dans mon support

    cependant !! comme j'ai de la resource et que j'ai pas peur du ridicule j'ai trouvé une solution pour les ajout d'evenement dynamique le "setAttribute" la tu te dis c'est bon on l' a perdu

    pas du tout

    dans la boucle pour mon support VBA voila comment j'ajoute ou modifie l'evenement dynamiquement

    exemple pour une liste
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    listfn.setAttribute("onchange", "execCom('fontName','false', this.value)");
    ou exemple ici pour les boutons
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    bout.setAttribute("onclick", "execCom('" +boutons[b][1]+ "'" + ",'" +boutons[b][2] + "','" + boutons[b][3] +"')");


    voila donc pour mon wysiwyg il y aura 2 versions 1 compatible IE10,11,chrome et l'autre pour mon userfomr VBA tout deux basés sur le meme sauf pour l'attributions des evenements bouton et autres

    je precise que dans la boucle de creation de boutons j'ai bien essayé comme je le fait en VB/VBA (dom1)

    bout.click="......." mais non mon support déclenche l'erreur non supporté
    je sais c'est vraiment tordu en vb il le comprend en JS non !

    ca te donne une idée de a quoi je fait face

    c'est pas grave quand je developpe pour IE (11/edge) je transformerais pour mon support ensuite

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/05/2010, 09h32
  2. Supprimer un canevas pour le remplacer par un autre
    Par mechul dans le forum Tkinter
    Réponses: 2
    Dernier message: 27/04/2010, 02h20
  3. Réponses: 0
    Dernier message: 20/11/2009, 16h27
  4. Réponses: 11
    Dernier message: 22/06/2009, 09h58
  5. supprimer un fichier pour sauvegarder le même modifier a la place
    Par tiph02 dans le forum Format d'échange (XML, JSON...)
    Réponses: 13
    Dernier message: 21/01/2009, 12h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo