Zeroclipboard несколько элементов - PullRequest
3 голосов
/ 28 января 2010

У меня возникают проблемы при создании нескольких экземпляров Zeroclipboard в моем коде, при каждом запуске которого появляется всплывающее окно после его вызова.

<a class="xxx" href="popup.url.php" ><span >FRSDE3RD</a>
<a class="xxx" href="popup.url2.php" ><span >FRSDE3RD2</a>
<a class="xxx" href="popup.url3.php" ><span >FRSDE3RD3</a>
$(document).ready(function(){
    ZeroClipboard.setMoviePath( 'path/to/swf/ZeroClipboard.swf' );
    // setup single ZeroClipboard object for all our elements
    clip = new ZeroClipboard.Client();
    clip.setHandCursor( true );

    // assign a common mouseover function for all elements using jQuery
    $('a.xxx').mouseover( function() {
        // set the clip text to our innerHTML
        var url = $(this).attr("href");
        var code = $(this).children('span').html();
        clip.setText( $(this).children('span').html() );//this.innerHTML );

        clip.glue(this);
        clip.addEventListener('onMouseDown', function(){
            clip.reposition(this);
            clip.setText( code );
        });

        clip.addEventListener('onComplete', function(){ 
            clip.reposition(this);
            popUp(url);
        }); 


    });
});

function popUp(URL)
{
    day = new Date();
    id = day.getTime();
    eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=1,scrollbars=1,location=1,statusbar=1,menubar=1,resizable=1,width=1024,height=768,left = 328,top = 141');");
}

Мне удается создать копию в буфер обмена, но если яиспользуйте либо onMouseUp, либо события onComplete для запуска всплывающей функции, либо она запускается как 4-5 всплывающих окон, либо вообще не срабатывает.

PS Я пытался адаптировать решение из Как загрузить ответ Ajaxв буфер обмена, используя jQuery и ZeroClipboard? вместо вызова ajax просто скопируйте в буфер обмена и по завершении на обед всплывающее окно ... как я уже сказал, не работает для меня.

Что еще я понял этов то время как у меня включен flashblocker, каждый раз, когда я переключаю тэг CODE, в одном и том же месте создается новая флэш-память, поэтому это может быть объяснением, почему у меня появляется 3-4 всплывающих окна, когда я нажимаю на нее.Если я переверну больше, появится больше всплывающих окон.Есть ли способ остановить создание вспышки в том же месте или уничтожить при развертывании?

Ответы [ 3 ]

14 голосов
/ 29 января 2010

после дополнительных исследований я нашел решение этой проблемы:

$("a.xxx").each(function() {
  //Create a new clipboard client
  var clip = new ZeroClipboard.Client();
  clip.setHandCursor( true );

  //Glue the clipboard client to the last td in each row
  clip.glue(this);

  var url = $(this).attr("href");
  //Grab the text from the parent row of the icon
  var code = $(this).children('span').html();    
  clip.setText(code);

  //Add a complete event to let the user know the text was copied
  clip.addEventListener('complete', function(client, text) {
    //alert("Copied text to clipboard:\n" + text);
    popUp(url);
  });
});

это решение, если кто-то еще застрянет на этой проблеме.

0 голосов
/ 21 января 2016

Ответ Андрея С. устарел. Просто сделайте это следующим образом.

<a id="test1" class="test" href="#"  data-clipboard-text="1">111</a>
<a id="test2" class="test" href="#"  data-clipboard-text="2">111</a>
<a id="test3" class="test" href="#"  data-clipboard-text="3">111</a>
<script src="js/jquery-1.11.3.min.js"></script>
<script src="dist1/ZeroClipboard.js"></script>
<script>
var client = new ZeroClipboard( );
client.clip($(".test"));

client.on( "ready", function( readyEvent ) {
  client.on( "aftercopy", function( event ) {
    alert("Copied text to clipboard: " + event.data["text/plain"] );
  } );
});

</script>
0 голосов
/ 05 октября 2014

Попробуйте использовать http://www.steamdev.com/zclip/, это позволит вам получить прямой доступ к jquery, и вы можете использовать свою собственную логику в операторе возврата.

включает jquery.zclip.js скачать и сохранить ZeroClipboard.swf

Вот фрагмент:

$(".class-to-copy").zclip({
    path: "assets/js/ZeroClipboard.swf",
    copy: function(){
        return $(this).attr("data-attribute-with-text-to-copy");
    }
});

Убедитесь, что вы изменили путь SWF.

...