2013-06-06 6 views
1

J'essaie d'utiliser la dernière version du plugin ZeroClipboard sur une page dans laquelle le code HTML est généré dynamiquement. J'ai essayé plusieurs variantes de mise en œuvre, mais toutes ont le même effet global. Je semble finir avec une page contenant les éléments flash parce que quand je clique avec le bouton droit sur l'élément approprié, j'obtiens le popup "About Flash Player" - mais je vois aussi dans ce même popup "Movie not loaded"Les événements ZeroClipboard ne se déclenchent pas

J'utilise JQuery 1.9.1 et Twitter Bootstrap 2.3.1. Mon plugin flash est v11.7.700.202. Mon serveur web est IIS7.5

Le code que j'utilise pour générer dynamiquement le code HTML est dans une boucle la lecture d'un tableau d'ID utilisateur et ressemble à ceci:

str=str+ '<span class="bMail_address" id=span-"'+ 
    st.EmailAddresses[i]+ 
    '" data-clipboard-text="'+ 
    st.EmailAddresses[i]+ 
    '@mydomain.com">'+ 
    st.EmailAddresses[i] + 
    "@mydomain.com&nbsp;&nbsp;</span>"; 

Après une boucle dans le tableau et outputtng la chaîne résultante, je puis essayer d'ajouter dans les choses ZeroClipboard comme suit: -

// bind ZeroClipboard 
$('.bMail_address').each (function() { 
    // read text to copy from the data-clipboard-text attribute 
    var msg=$(this).attr('data-clipboard-text'); 

    //create ZeroCiplboard object 
    var clip = new ZeroClipboard(); 

    // set the text to copy 
    clip.setText(msg); 

    // setup event handlers 
    clip.on('complete', function (client, text) { 
     alert("copied: "+text+ "to clipboard"); 
    }); 

    clip.on('noflash', function (client, args) { 
     alert("You don't support flash"); 
    }); 

    // glue the object to the element 
    clip.glue($(this)); 

}); 

en utilisant les outils de débogage Chrome, je peux voir l'itération dans la boucle en créant de nouveaux objets ZeroClipboard pour tous mes objets nouvellement créés et il y a pas d'exceptions non interceptées, mais la alertes ne se passent jamais je suis si présumant l'événement « complet » ne se déclenche jamais

Je suis sûr que je l'ai fait une erreur noob simple, mais je ne peux pas le voir

Toutes les idées et suggestions reçues avec gratitude

Répondre

2

A propos de l'erreur flash: rendre le fichier "ZeroClipboard.swf" à la disposition du navigateur en ajoutant:

`ZeroClipboard.setDefaults({ moviePath: 'http://YOURSERVER/path/ZeroClipboard.swf' });` 

voir aussi: https://github.com/zeroclipboard/ZeroClipboard/blob/master/docs/instructions.md

Deuxièmement, que voulez-vous ajouter au presse-papiers et quand?

Ce qui (colle ce) sera un texte et quand est un événement (c'est-à-dire un clic sur un bouton). Glue() ajoutera un événement click à l'élément de niveau dom que vous collez. Si l'élément a un 'data-clipboard-text' sa valeur sera utilisée par la colle (vous n'avez pas à le définir).

Exemple: ajouter l'adresse e-mail dans le presse papier lorsque vous cliquez dessus (un clip crée pour chaque adresse e-mail):

<script> 

ZeroClipboard.setDefaults({ moviePath: 'ZeroClipboard-master/ZeroClipboard.swf' }); 

$(function() { 

    st = {} 
    st.EmailAddresses = Array('test','test2','test3'); 
    $.each(st.EmailAddresses,function(i,emailadres) 
    { 

     str = '<span class="bMail_address" id=span-"'+ 
     emailadres+ 
     '" data-clipboard-text="'+ 
     emailadres+ 
     '@mydomain.com">'+ 
     emailadres + 
     "@mydomain.com&nbsp;&nbsp;</span>"; 

     $('.container').append(str); 

    }); 

    var clip = new Array(); 
    // bind ZeroClipboard 
    $('.bMail_address').each (function(i,email) { 
    //create ZeroCiplboard object 
    clip[i] = new ZeroClipboard(); 

    clip[i].on('complete', function (client, text) { 
    alert("copied: "+ text.text+ " to clipboard"); 
    }); 

    clip[i].glue(email); 
    }); 


}) 
</script> 

NOTE: Le texte dans la fonction onComplete est un objet, utilisez donc text.text à alerter comme une chaîne

+0

Merci pour la suggestion, je vais l'essayer au cours du week-end –

+0

Malheureusement, cela ne semble pas fonctionner, mais merci pour l'effort, et le code est plus propre que le mien. –

+0

Je peux voir chaque "Clip [i]" est créé et les options définies pour le moviePath (même domaine, répertoire différent) et les gestionnaires sont créés dans chaque objet de clip. Toutefois, les événements ne sont pas déclenchés lorsque je clique sur l'objet de film dans la page Web. L'objet film est définitivement créé car lorsque je clique avec le bouton droit de la souris, je reçois le menu "À propos d'Adobe Flash Player" plutôt que l'élément habituel pour les éléments HTML Des idées sur la manière de déboguer davantage? –

Questions connexes